C# 对HttpContext.Current.Session的静态引用是否会为所有用户返回相同的会话?
对于同一web应用程序的多个用户,以下代码中是否存在问题?我的意思是,我知道一个纯静态字符串将在单个ASP.NET应用程序的所有会话中共享,但鉴于它显式地引用了C# 对HttpContext.Current.Session的静态引用是否会为所有用户返回相同的会话?,c#,asp.net,session,static,httpcontext,C#,Asp.net,Session,Static,Httpcontext,对于同一web应用程序的多个用户,以下代码中是否存在问题?我的意思是,我知道一个纯静态字符串将在单个ASP.NET应用程序的所有会话中共享,但鉴于它显式地引用了当前.Session,即使它是静态的,它似乎总是引用“当前用户”的会话实例 但是发生了一个错误,这可以解释为每个人都共享模式的当前值,因此最近的更改覆盖了其他人的模式值 (作为背景:此字符串位于整个应用程序中使用的Helpers类中。我不想在整个应用程序中对Session[“Mode”]进行硬编码引用,也不想在aspx.cs页面的每个方法
当前.Session
,即使它是静态的,它似乎总是引用“当前用户”的会话实例
但是发生了一个错误,这可以解释为每个人都共享模式的当前值,因此最近的更改覆盖了其他人的模式值
(作为背景:此字符串位于整个应用程序中使用的Helpers
类中。我不想在整个应用程序中对Session[“Mode”]
进行硬编码引用,也不想在aspx.cs页面的每个方法调用中都通过Session[“Mode”]
。)
HttpContext.Current
始终返回当前请求的上下文(如果存在当前请求)
由于每个用户将执行不同的请求,因此每个上下文都将不同。您的属性是静态的。这实际上是用户之间共享属性的原因
有关详细信息,请参阅。“获取或设置当前HTTP请求的HttpContext对象。”在本例中,该属性是get
和set
方法上的外观。因此,从本地会话获取数据的事实使得对该属性会话的引用依赖于会话,因此不会在用户之间共享。因为不能从静态成员中调用实例成员,我将回顾HttpContext.Current.Session
,看看他们是如何解决这个问题的,并使其针对用户。如果我有时间,我会查一下,但答案会很有趣。
public static string Mode
{
get
{
var value = HttpContext.Current.Session["Mode"];
return (value ?? string.Empty).ToString();
}
set
{
HttpContext.Current.Session["Mode"] = value;
}
}