对于同一Web应用程序的多个用户,以下代码是否存在问题?我的意思是,我知道一个纯静态字符串将在单个ASP.NET应用程序的所有会话中共享,但鉴于它明确引用Current.Session
,即使它是静态的,它似乎总是会引用到“当前用户”的会话实例。
但是一个错误正在发生,可以解释为每个人共享Mode
的当前值,从而最近的更改会覆盖其他人的模式值。
(作为背景:此字符串位于整个应用程序中使用的Helpers
类中。我不想在整个应用程序中对Session["Mode"]
进行硬编码引用,并且不希望必须在aspx.cs页面的每个方法调用中传递Session["Mode"]
。)
public static string Mode
{
get
{
var value = HttpContext.Current.Session["Mode"];
return (value ?? string.Empty).ToString();
}
set
{
HttpContext.Current.Session["Mode"] = value;
}
}
答案 0 :(得分:8)
HttpContext.Current
始终返回当前请求的上下文(如果 是当前请求)。
由于每个用户将执行不同的请求,因此每个上下文都不同。
答案 1 :(得分:0)
您的财产是static
。这实际上是用户之间共享属性的原因。
有关详细信息,请参阅Scope of static Variable in multi-user ASP.NET web application。