首页 > 解决方案 > 每次登录都会重置会话状态

问题描述

我有一个带有简单登录页面的 MVC 应用程序。

成功验证用户后,我用他们的详细信息填充会话变量,即 -

System.Web.HttpContext.Current.Session["usergroup"] = Convert.ToInt32(userDetails[0]);
System.Web.HttpContext.Current.Session["userid"] = Convert.ToInt32(userDetails[1]);

我有一个像这样的用户类 -

public class MyUser
    {

        public int usergroup { get; set; }
        public int userid { get; set; }

        public static readonly MyUser Default = new MyUser()
        {
            usergroup = 0,
            userid = 0
        };
    }

填充会话变量后,我使用这些来填充我的MyUser变量,即 -

MyUser.Default.usergroup = (Int32)System.Web.HttpContext.Current.Session["usergroup"];
MyUser.Default.userid = (Int32)System.Web.HttpContext.Current.Session["userid"];

登录和注销,切换用户在我的开发笔记本电脑上运行良好。

我的问题是我在单独的测试笔记本电脑上的网络上设置了一个 IIS 应用程序,并以 User1 身份登录该笔记本电脑。(其中 url 是 localhost/MyApp)

然后为了测试多用户功能,在开发笔记本电脑上,我以 User2 身份登录(其中 url 是 http://{MY.NETWORK.IP}/MyApp)。

我能够以 User2 的身份正常登录,但是如果我回到测试笔记本电脑并刷新屏幕,即使我仍然以 User1 身份登录,User2 的信息也可以访问和可见!

每次用户(无论机器如何)登录时,我的会话变量都会被重置,我怎样才能阻止这种情况发生?

我做了很多阅读,看到人们通过在 IIS 中创建规则来停止缓存,但这对我没有任何作用。人们也谈论使用 2 个独立的浏览器,但是这 1. 什么也没做,2 与我无关,因为我在 2 台完全独立的机器上。

标签: asp.net-mvcauthenticationiis

解决方案


Web 应用程序是一个应用程序,服务于多个用户。

作为单个应用程序意味着所有用户共享任何静态值。因此,当您public static readonly MyUser Default在登录后更改属性时,所有用户现在都会看到同一个用户。

如果您不想System.Web.HttpContext.Current.Session["usergroup"]通过代码完成所有操作(我也不想),那么您可以将其包装在某个类中:

public class MySession
{
   public int Usergroup
   {
      get => (int)System.Web.HttpContext.Current.Session["usergroup"];
      set => System.Web.HttpContext.Current.Session["usergroup"] = value;
   }

   // etc
}

由于它本身不存储数据,因此您甚至可以将其设为静态类。


推荐阅读