Переменная сессии Asp.net - PullRequest
13 голосов
/ 08 марта 2012

У меня есть проект asp.net с кодом на C #.У меня есть статический класс GlobalVariable, в котором я храню некоторую информацию, например, о выбранном в данный момент продукте.

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

Я хотел бы создать (из кода c #) некоторую переменную сеанса, используемую только из кода c #, но не только со страницы, но из любого класса.

Ответы [ 3 ]

26 голосов
/ 08 марта 2012

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

Чтобы получить доступ к объекту Session из нестраничного класса, вы должны использовать HttpContext.Current.Session.

9 голосов
/ 08 марта 2012

GlobalVariable - вводящее в заблуждение имя. Как бы это ни называлось, оно не должно быть static, если это за сеанс. Вместо этого вы можете сделать что-то вроде этого:

// store the selected product
this.Session["CurrentProductId"] = productId;

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

Ниже приведен обзор работы с хранилищем сеансов в ASP .NET на MSDN.

8 голосов
/ 08 марта 2012

Вы как бы ответили на свой вопрос.Ответ в переменных сеанса.В вашем классе GlobalVariable вы можете разместить свойства, которые поддерживаются переменными сеанса.

Пример:

public string SelectedProductName 
{
    get { return (string)Session["SelectedProductName"]; }
    set { Session["SelectedProductName"] = value; }
}
...