对HttpContext.Current.Session的静态引用是否为所有用户返回相同的会话?

时间:2011-02-04 15:01:16

标签: c# asp.net session static httpcontext

对于同一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;
    }
}

2 个答案:

答案 0 :(得分:8)

HttpContext.Current始终返回当前请求的上下文(如果 是当前请求)。

由于每个用户将执行不同的请求,因此每个上下文都不同。

答案 1 :(得分:0)

您的财产是static。这实际上是用户之间共享属性的原因。

有关详细信息,请参阅Scope of static Variable in multi-user ASP.NET web application