对HttpContext.Current.Session的静态引用是否为所有用户返回相同的会话?
在同一Web应用程序的多个用户方面,以下代码是否存在问题? 我的意思是,我知道一个纯静态字符串将在单个ASP.NET应用程序的所有会话中共享,但鉴于这明确引用了Current.Session
,即使它是静态的,它似乎总是引用“当前用户”的会话实例。
但是一个错误正在发生,可以解释为每个人共享Mode
的当前值,从而最近的更改覆盖其他人的模式值。
(作为背景:此字符串位于整个应用程序中使用的Helpers
类中。我不希望在整个应用程序中对Session["Mode"]
进行硬编码引用,并且不希望必须传递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; } }
HttpContext.Current
总是返回当前请求的上下文(如果有当前请求)。
由于每个用户将执行不同的请求,因此每个上下文将是不同的。
你的财产是static
。 这实际上是用户之间共享属性的原因。
有关更多详细信息,请参阅多用户ASP.NET Web应用程序中的静态变量范围 。