Переменная сеанса Asp.net
У меня есть проект asp.net с кодом С#. У меня есть статический класс GlobalVariable, где я храню некоторую информацию, например, выбранный в данный момент продукт.
Однако, я видел, что, когда есть два пользователя, использующих веб-сайт, если один изменяет выбранный продукт, если он изменяет его для всех. Статические переменные кажутся общими для всех.
Я хотел бы создать (из кода С#) некоторую переменную сеанса, используемую только из кода С#, но не только со страницы, но и из любого класса.
Ответы
Ответ 1
Да статические переменные совместно используются всем приложением, они никоим образом не являются закрытыми для пользователя/сессии.
Чтобы получить доступ к объекту Session из класса, отличного от страницы, вы должны использовать HttpContext.Current.Session
.
Ответ 2
GlobalVariable
является вводящим в заблуждение именем. Как бы то ни было, это не должно быть static
, если оно за сеанс. Вместо этого вы можете сделать что-то вроде этого:
// store the selected product
this.Session["CurrentProductId"] = productId;
Вы не должны пытаться сделать коллекцию Session
глобально доступной. Скорее, передайте только нужные вам данные и получите/установите с помощью Session
, где это необходимо.
Здесь приведен обзор работы с хранилищем сеансов в ASP.NET на MSDN.
Ответ 3
Ты вроде как ответил на свой вопрос. Ответ - в переменных сеанса. В вашем классе GlobalVariable вы можете поместить свойства, которые поддерживаются переменными сеанса.
Пример:
public string SelectedProductName
{
get { return (string)Session["SelectedProductName"]; }
set { Session["SelectedProductName"] = value; }
}