Статическая ссылка на HttpContext.Current.Session возвращает один и тот же сеанс для всех пользователей?
Есть ли место для проблемы в следующем коде с точки зрения нескольких пользователей одного и того же веб-приложения? Я имею в виду, я знаю, что чисто статическая строка будет совместно использоваться всеми сеансами для одного приложения ASP.NET, но, учитывая, что это явно относится к Current.Session
даже если он статический, кажется, что он всегда ссылается на экземпляр сеанса "текущего пользователя".
Но происходит ошибка, которая может быть объяснена всеми, кто разделяет текущее значение Mode
и, таким образом, самое последнее изменение перезаписывает значение режима всех остальных.
(В качестве фона: эта строка находится в Helpers
класс, который используется во всем приложении. Я не хочу делать жестко ссылки на Session["Mode"]
по всему приложению и не хочу проходить Session["Mode"]
в каждом вызове метода со страницы aspx.cs.)
public static string Mode
{
get
{
var value = HttpContext.Current.Session["Mode"];
return (value ?? string.Empty).ToString();
}
set
{
HttpContext.Current.Session["Mode"] = value;
}
}
2 ответа
HttpContext.Current
всегда возвращает контекст текущего запроса (если есть текущий запрос).
Поскольку каждый пользователь будет выполнять разные запросы, каждый контекст будет отличаться.
Ваша собственность static
, Это на самом деле причина разделения собственности между пользователями.
Дополнительные сведения см. В разделе Область действия статической переменной в многопользовательском веб-приложении ASP.NET.