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

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

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

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

Комментарии к вопросу (2)
Решение

Попробуйте

//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;

//to clear the session value

Session["products"]=null;
Комментарии (9)

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

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

Наш многократно используемый, сериализуемый объект:.

[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().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;
    }
}

Затем вы зарегистрируете это в файле Global.asax.cs.

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

Слово предупреждения:

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

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

Комментарии (3)

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

ASP.NET Session State Overview

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

Session["FirstName"] = FirstNameTextBox.Text;

Чтобы извлечь значение:

var firstName = Session["FirstName"];
Комментарии (3)

Вы можете хранить любые данные в сессии, используя:

Session["VariableName"]=value;

Эта переменная будет длиться 20 минут или около того.

Комментарии (0)

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

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

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

Комментарии (1)