.NET 6中设置Session超时为30分钟不生效问题求助
.NET 6 Session超时设置未生效的解决方法
你遇到的Session设置30分钟超时却提前失效的问题,通常由以下几个原因导致,对应解决方式如下:
1. 中间件调用顺序错误
Session中间件的位置必须严格遵循在UseRouting()之后,UseAuthorization()和UseEndpoints()之前,否则Session配置不会生效。正确的中间件注册顺序示例:
var builder = WebApplication.CreateBuilder(args); // 服务注册代码 builder.Services.AddDistributedMemoryCache(); builder.Services.AddSession(options => { options.IdleTimeout = TimeSpan.FromMinutes(30); }); var app = builder.Build(); // 中间件顺序 app.UseRouting(); app.UseSession(); // 关键:必须放在此位置 app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); app.Run();
2. 未同步配置Session Cookie的过期时间
Session依赖Cookie存储会话标识,默认Cookie的过期时间为20分钟,会优先覆盖你设置的Session超时时间。需要在AddSession中同步配置Cookie的过期时间,确保与IdleTimeout一致:
builder.Services.AddSession(options => { options.IdleTimeout = TimeSpan.FromMinutes(30); options.Cookie.HttpOnly = true; options.Cookie.IsEssential = true; options.Cookie.Expires = TimeSpan.FromMinutes(30); // 与Session超时保持一致 });
3. 排查其他代码干扰
检查项目中是否存在手动修改Session过期时间的代码(比如在Controller或过滤器中调用Session.SetTimeout()),或者有第三方中间件干扰了Session的默认配置。
内容的提问来源于stack exchange,提问作者Thomas Charles
相关产品推荐
相关产品推荐

