Как использовать сеансы в ASP.NET приложение MVC 4?



Я новичок ASP.NET MVC. Я использовал PHP раньше, и было легко создать сеанс и выбрать записи пользователей на основе текущих переменных сеанса.



Я искал везде в Интернете для простого пошагового руководства, которое может показать мне, как создавать и использовать сеансы в моем C# ASP.NET приложение MVC 4. Я хочу создать сеанс с пользовательскими переменными, к которым я могу получить доступ из любой точки моих контроллеров и иметь возможность использовать переменные в моем LINQ запросы.



-спасибо заранее!

695   4  

4 ответов:

попробовать

//adding data to session
//assuming the method below will return list of Products

var products=Db.GetProducts();

//Store the products to a session

Session["products"]=products;

//To get what you have stored to a session

var products=Session["products"] as List<Product>;

//to clear the session value

Session["products"]=null;

из-за отсутствия состояния в интернете сеансы также являются чрезвычайно полезным способом сохранения объектов в запросах путем их сериализации и хранения в сеансе.

идеальный вариант использования этого может быть, если вам нужно получить доступ к регулярной информации в вашем приложении, чтобы сохранить дополнительные вызовы базы данных по каждому запросу, эти данные могут быть сохранены в объекте и несериализованы по каждому запросу, например:

наши многоразовые, сериализуем объект:

[Serializable]
public class UserProfileSessionData
{
    public int UserId { get; set; }

    public string EmailAddress { get; set; }

    public string FullName { get; set; }
}

использовать случае:

public class LoginController : Controller {

    [HttpPost]
    public ActionResult Login(LoginModel model)
    {
        if (ModelState.IsValid)
        {
            var profileData = new UserProfileSessionData {
                UserId = model.UserId,
                EmailAddress = model.EmailAddress,
                FullName = model.FullName
            }

            this.Session["UserProfile"] = profileData;
        }
    }

    public ActionResult LoggedInStatusMessage()
    {
        var profileData = this.Session["UserProfile"] as UserProfileSessionData;

        /* From here you could output profileData.FullName to a view and
        save yourself unnecessary database calls */
    }

}

после того, как этот объект был сериализован, мы можем использовать его во всех контроллерах без необходимости создавать его или запрашивать базу данных для данных, содержащихся в нем снова.

введите объект сеанса с помощью инъекции зависимостей

в идеальном мире вы могли бы 'программа для интерфейса, а не реализации ' и введите Ваш сериализуемый сеанс объект в ваш контроллер, используя инверсию контейнера Управления по выбору, например (в этом примере используется StructureMap, поскольку это тот, с которым я больше всего знаком).

public class WebsiteRegistry : Registry
{
    public WebsiteRegistry()
    {
        this.For<IUserProfileSessionData>().HybridHttpOrThreadLocalScoped().Use(() => GetUserProfileFromSession());   
    }

    public static IUserProfileSessionData GetUserProfileFromSession()
    {
        var session = HttpContext.Current.Session;
        if (session["UserProfile"] != null)
        {
            return session["UserProfile"] as IUserProfileSessionData;
        }

        /* Create new empty session object */
        session["UserProfile"] = new UserProfileSessionData();

        return session["UserProfile"] as IUserProfileSessionData;
    }
}

затем вы зарегистрируете это в своем .

для тех, кто не знаком с инъекционными объектами сеанса, вы можете найти более подробное сообщение в блоге о предмете здесь.

предупреждения:

стоит отметить, что сеансы должны быть сведены к минимуму, большие сеансы могут начать вызывать проблемы с производительностью.

также рекомендуется не хранить в них конфиденциальные данные (пароли и т. д.).

вот как работает состояние сеанса ASP.NET и ASP.NET MVC:

ASP.NET обзор состояния сеанса

в принципе, вы делаете это, чтобы сохранить значение в сессии объекта:

Session["FirstName"] = FirstNameTextBox.Text;

чтобы получить значение:

var firstName = Session["FirstName"];

U может хранить любое значение в сеансе, например Session ["FirstName"] = FirstNameTextBox.Текст; но я предложу вам взять в качестве статического поля в модели присвоить ему значение, и вы можете получить доступ к этому значению поля в любом месте приложения. Вам не нужна сессия. сессии следует избегать.

public class Employee
{
   public int UserId { get; set; }
   public string EmailAddress { get; set; }
   public static string FullName { get; set; }
}

на контроллере-сотрудник.Полное имя = "Азбука"; Теперь вы можете получить доступ к этому полному имени в любом месте приложения.

Comments

    Ничего не найдено.