MVC 5项目新增Session键数据丢失问题咨询
MVC5 新增Session键刷新后丢失的排查与解决
这种Session数据丢失的问题我在MVC5项目里碰过好多次,咱们一步步拆解可能的原因,逐个排查:
1. 先确认Session的存储配置是否正常
- 如果你的项目用的是默认的
InProc存储模式,得检查IIS应用池的回收设置——要是应用池频繁回收(比如内存阈值设得太低、固定时间回收),会直接导致Session全部丢失。可以去IIS管理器里找到对应应用池,右键“高级设置”,看看“回收”相关的参数。 - 要是用的是
StateServer或者SQL Server存储,先确认StateServer服务有没有启动,SQL Server的连接字符串是否正确。另外,如果新增的Session值是自定义对象,必须给类加上[Serializable]特性,不然无法被序列化存储,看起来存进去了,实际根本没保存成功,刷新就没了:[Serializable] public class NewSessionData { public string Data { get; set; } public DateTime CreateTime { get; set; } }
2. 检查新增Session键的赋值逻辑
- 你提到原有4个键是通过控制器过滤器赋值的,那新增的键是不是只在某个Action里赋值了一次?如果刷新页面或者跳转到其他Action时,这个键没有被重新赋值,会不会是Session刚好过期了?或者有没有可能键名写错了(比如大小写不一致,Session键名是区分大小写的)?
- 可以在赋值后立刻打印调试信息,确认数据确实存进Session了:
然后在其他Action里也打印同样的信息,看看这个键是否还存在。// 赋值后调试 Session["NewKey"] = "测试数据"; Debug.WriteLine($"当前Session键数量:{Session.Count},是否包含NewKey:{Session.Keys.Contains("NewKey")}");
3. 排查是否有代码清空了Session
- 有没有可能在全局过滤器、异常处理代码或者新增功能的逻辑里,不小心调用了
Session.Clear()、Session.RemoveAll(),或者针对这个新增键调用了Session.Remove("NewKey")?特别是有些异常捕获后会清空Session,仔细排查一下新增功能相关的代码块。
4. 验证Session过期时间设置
- 打开web.config,检查Session的超时时间是不是被设得太短了:
另外,也可以检查一下Session Cookie的有效期,不过刷新页面就丢失的话,这个可能性相对较低。<system.web> <!-- 默认是20分钟,看看是不是被改成了1分钟之类的 --> <sessionState mode="InProc" timeout="20" /> </system.web>
5. 检查过滤器的执行顺序
- 原有4个键是通过控制器级过滤器赋值的,有没有可能新增的Session键被后续执行的过滤器给覆盖或者清除了?可以调整过滤器的执行顺序(用
Order属性),或者在过滤器里打印Session的状态,跟踪数据是否被修改。
先从最简单的键名检查、是否有清空Session的代码开始排查,一般很快就能找到问题所在。
内容的提问来源于stack exchange,提问作者orhun.begendi
相关产品推荐
相关产品推荐

