Статическая ссылка на HttpContext.Current.Session возвращает один и тот же сеанс для всех пользователей? - PullRequest
5 голосов
/ 04 февраля 2011

Есть ли место для проблемы в следующем коде с точки зрения нескольких пользователей одного и того же веб-приложения?Я имею в виду, что я знаю, что чисто статическая строка будет совместно использоваться всеми сеансами для одного приложения 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 ]

8 голосов
/ 04 февраля 2011

HttpContext.Current всегда возвращает контекст текущего запроса (если - текущий запрос).

Поскольку каждый пользователь будет выполнять разные запросы, каждый контекст будет отличаться.

0 голосов
/ 01 ноября 2016

Ваша собственность static. Это на самом деле является причиной разделения собственности между пользователями.

Подробнее см. Область действия статической переменной в многопользовательском веб-приложении ASP.NET .

...