C# 静态会话类和多个用户

C# 静态会话类和多个用户,c#,asp.net,session,C#,Asp.net,Session,我正在构建一个类来存储会话中的用户ID和用户角色。我不确定当多个用户同时在站点上时,这个类将如何运行。有人认为这有问题吗 public static class SessionHandler { //*** Session String Values *********************** private static string _userID = "UserID"; private static string _use

我正在构建一个类来存储会话中的用户ID和用户角色。我不确定当多个用户同时在站点上时,这个类将如何运行。有人认为这有问题吗

public static class SessionHandler
    {   
        //*** Session String Values ***********************

        private static string _userID = "UserID";
        private static string _userRole = "UserRole";

        //*** Sets and Gets **********************************************************

        public static string UserID
        {
            get
            {
                if (HttpContext.Current.Session[SessionHandler._userID] == null)
                { return string.Empty; }
                else
                { return HttpContext.Current.Session[SessionHandler._userID].ToString(); }
            }
            set
            { HttpContext.Current.Session[SessionHandler._userID] = value; }

        }
        public static string UserRole
        {
            get
            {
                if (HttpContext.Current.Session[SessionHandler._userRole] == null)
                { return string.Empty; }
                else
                { return HttpContext.Current.Session[SessionHandler._userRole].ToString(); }
            }
            set
            { HttpContext.Current.Session[SessionHandler._userRole] = value; }
        }

}

您将为每个连接获得一个新会话。不会有两个用户共享会话。每个连接都有自己的
SessionID
值。只要用户停留在您的页面上(不关闭浏览器等),用户将保留从一个请求到下一个请求的会话。

您发布的代码与我们这里的某些代码完全相同

两年来,它一直运转良好


每个用户访问的是自己的会话。向服务器发出的每个请求都是一个新线程。即使两个请求是同时发生的,HttpContext.Current对于每个请求都是不同的。

这对于多个用户访问您的应用程序很好,因为所有同时访问应用程序的不同用户都会生成不同的sessionid。如果您在系统中定义了两个不同的会话变量,它将以类似的方式工作。
这将类似于使用静态包装器类SessionHandler包装两个会话状态

不稳定,并鼓励使用静态“全局”助手等不良做法。这不是一个技术问题,更多的是一个具有长期影响的心态问题不一定。。。如果您正在进行跨站点身份验证。。。您可以使用同一会话拥有一个新的经过身份验证的用户。我以前遇到过这个问题。会话独立于身份验证。如果用户能够结束会话并终止第一个站点上的授权。。。授权将从第二个站点取消,但会话是单独的。