ASP.NET MVC中Session.Timeout设置被忽略的问题排查求助
需检查的配置项
Azure AD 令牌生命周期配置
对接Azure AD时,默认access token有效期通常为1小时左右,即使Session未超时,令牌过期后可能触发重新认证,导致Session被重置或清除。需在Azure AD应用注册中检查:- 访问令牌的过期时间,可调整为更长时长(最长1天)
- 刷新令牌的配置,确保能自动刷新访问令牌以维持会话
IIS 应用池回收规则
若Session使用默认的InProc模式,应用池回收会直接导致Session丢失,需检查:- 闲置超时:默认20分钟,若应用超过该时长无请求,应用池会回收。需将此值设为远大于9999小时,或直接禁用闲置超时
- 固定时间间隔回收:默认1740分钟(29小时),若业务允许可延长或禁用该规则
- 内存回收阈值:若服务器内存不足触发应用池回收,需调整阈值或增加服务器内存
SessionState 模式与配套配置
确认web.config中sessionState的mode属性:- 若为
StateServer或SQLServer,需确保对应的服务(ASP.NET State Service或SQL Server)正常运行,且连接配置正确,避免因服务异常导致Session丢失 - 若为
InProc,需结合上述应用池配置一起调整
- 若为
OIDC 认证票据超时设置
在ASP.NET MVC的Startup配置中,检查OIDC认证的Cookie过期策略:app.UseCookieAuthentication(new CookieAuthenticationOptions { ExpireTimeSpan = TimeSpan.FromHours(9999), // 需与Session超时匹配 SlidingExpiration = true // 启用滑动过期,活动时自动延长有效期 });同时确保Azure AD返回的
id token过期时间与Session超时协调,避免认证票据提前失效浏览器 Cookie 策略
Session依赖浏览器存储的Session Cookie,需检查:- 浏览器是否设置了自动清理闲置Cookie的规则,可测试在不同浏览器中是否存在相同问题
- 应用是否正确配置了Cookie的持久化或过期时间,避免浏览器提前清除Cookie
服务器系统级限制
检查服务器的电源管理设置,确保服务器不会因休眠、睡眠或节能模式暂停运行,导致Session数据丢失
内容的提问来源于stack exchange,提问作者Leventogenna
相关产品推荐
相关产品推荐

