C# 静态类和会话变量

C# 静态类和会话变量,c#,asp.net,session-variables,static-classes,C#,Asp.net,Session Variables,Static Classes,我已经定义了一个静态类。在这个静态类中,我有以下方法 public static int GetUserId() { if(IsUserLoggedIn()) { return Convert.ToInt16(HttpContext.Current.Session["user"]); } return 0; } 我的问题是:当该函数为每个用户运行时,每个用户会得到不同的值吗?考虑到每个用户会话,会为会话[user]获取不同的userId 我不知道

我已经定义了一个静态类。在这个静态类中,我有以下方法

public static int GetUserId()
{
    if(IsUserLoggedIn())
    {
        return Convert.ToInt16(HttpContext.Current.Session["user"]);
    }
    return 0;
}
我的问题是:当该函数为每个用户运行时,每个用户会得到不同的值吗?考虑到每个用户会话,会为会话[user]获取不同的userId


我不知道静态类是否对此有用,或者是否会导致冲突问题。我是在C/ASP.NET中开发的。

HttpContext对于每个请求都是不同的,所以是的。

简而言之,我相信答案是肯定的,但是您应该避免在非工厂方法中使用硬编码依赖项。。。考虑接受一个HTTPSeServices状态,或者至少是一个HTTPACTION对象来进行操作,像这样:

public static int GetUserId(HttpContext context)
{
    if(IsUserLoggedIn())
    {
        return Convert.ToInt16(context.Session["user"]);
    }
    return 0;
}

但是,您可能应该在HttpContext IMHO上使用内置的IPrincipal用户属性。

这将给您一个从静态方法调用非静态方法的错误。。请参阅:-


是的,如果所有会话都设置了不同的值,它将获得不同的值。与GetUserId方法的静态实现无关。问:我很好奇-代码是否编译?@paulsm4您认为什么会导致编译错误?@JenishRabadiya即使在我读到关于静态类的文章时,我也无法完全理解它的局限性。谢谢你澄清这一点。我没有看到任何这样的调用HttpContext。当前是静态的,问题是关于C而不是Java。