2011-02-04 2 views
5

Есть ли место для выпуска в следующем коде с точки зрения нескольких пользователей одного и того же веб-приложения? Я имею в виду, что я знаю, что чисто статическая строка будет использоваться для всех сеансов для одного приложения ASP.NET, но при условии, что это явно относится к Current.Session, хотя это статично, похоже, что он всегда будет ссылаться на экземпляр сеанса «текущего пользователя».Статичная ссылка на HttpContext.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; 
    } 
} 
+0

«Получает или задает объект HttpContext для текущего HTTP-запроса». http://msdn.microsoft.com/en-us/library/system.web.httpcontext.current.aspx –

ответ

8

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

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

0

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

Для получения более подробной информации см. Scope of static Variable in multi-user ASP.NET web application.

+0

Свойство - это фасад над методом 'get' и' set' в этом случае. Таким образом, тот факт, что данные извлекаются из локального сеанса, делает ссылки на это свойство зависящими от сеанса и, следовательно, не разделяемыми между пользователями. –

+0

Поскольку вы не можете вызывать экземпляры экземпляра из статического члена, я бы рассмотрел «HttpContext.Current.Session», чтобы узнать, как именно они обойдутся и сделают его конкретным пользователем. Если у меня будет время, я посмотрю, но ответ будет интересным. – toddmo