Переменная сеанса 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; }
}