You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MVC应用部署到IIS后每次用户登录都会重置Session状态,该如何解决?

问题根本原因

你遇到的多用户身份串用问题,核心是误用全局静态实例存储用户级别身份数据,和Session配置、IIS缓存、测试浏览器无关:
ASP.NET应用中,static修饰的变量属于整个应用进程全局共享,所有访问站点的用户共用同一个MyUser.Default实例。本地开发时只有你单个用户测试,修改静态实例不会有冲突;部署到多用户访问的环境后,任意用户登录修改MyUser.Default的属性,所有其他用户读取到的都是被覆盖后的值,自然会出现User1能看到User2信息的问题。

修复步骤

  1. 移除所有直接对MyUser.Default赋值、从MyUser.Default读取当前用户身份的代码
  2. 封装统一的当前用户读取逻辑,直接从当前请求独立的Session中拉取数据,示例代码如下:
public static class UserAuthHelper
{
    // 每次读取都从当前用户的Session取,返回独立的MyUser实例
    public static MyUser CurrentLoginUser
    {
        get
        {
            var currentSession = System.Web.HttpContext.Current.Session;
            // Session不存在用户信息时返回默认未登录实例
            if (currentSession["usergroup"] == null || currentSession["userid"] == null)
            {
                return new MyUser()
                {
                    usergroup = 0,
                    userid = 0
                };
            }
            // 每次返回新的实例,避免不同用户数据互相干扰
            return new MyUser()
            {
                usergroup = (int)currentSession["usergroup"],
                userid = (int)currentSession["userid"]
            };
        }
    }
}
  1. 后续所有业务代码需要获取当前登录用户信息时,统一调用UserAuthHelper.CurrentLoginUser读取即可。
  2. 如果需要更稳定的身份验证能力,可直接使用ASP.NET自带的Forms身份验证、ASP.NET Identity体系,无需手动维护Session存储用户身份。

内容的提问来源于stack exchange,提问作者Ebikeneser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 05:45:03