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

ASP.NET Core 3.1如何延长Session空闲超时,配置4小时仍40分钟过期怎么办

核心原因

你修改的IIS会话状态配置针对的是传统ASP.NET框架的会话机制,和ASP.NET Core自带的Session中间件完全独立,所以修改后不会生效。40分钟过期通常是IIS应用程序池默认回收规则 + 会话存储在内存中共同导致的:IIS默认应用程序池空闲超时为20分钟,无访问时会自动回收进程,内存中存储的会话数据会被清空,叠加其他回收规则就会出现40分钟左右会话失效的现象。

解决方案
  • 调整IIS应用程序池配置
    打开IIS管理器 → 找到站点对应的应用程序池 → 右键选择「高级设置」:
    1. 将「空闲超时(分钟)」修改为240(对应4小时)
    2. 找到回收分类下的「常规时间间隔(分钟)」,修改为大于240的数值,或者设为0关闭固定间隔回收
    3. 清空「特定时间回收」列表,避免定时回收清空会话数据
  • 检查身份验证Cookie过期配置(如有接入登录功能)
    Session和身份验证Cookie是两套独立的过期机制,若使用Cookie身份验证,需要同步修改Cookie过期时间,示例配置如下:
    services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
        .AddCookie(options =>
        {
            options.ExpireTimeSpan = TimeSpan.FromHours(4);
            options.SlidingExpiration = true; // 开启滑动过期,每次用户操作刷新过期时间
        });
    
  • 调整中间件顺序(必做检查)
    确保Startup.cs的Configure方法中,app.UseSession()的顺序在app.UseRouting()之后、app.UseAuthorization()之前,顺序错误会导致Session配置不生效。
  • (可选)使用分布式缓存存储会话
    若需要避免应用重启、多实例部署时会话丢失,可将Session存储从默认内存改为分布式缓存(如Redis、SQL Server),Redis配置示例如下:
    // 先安装NuGet包:Microsoft.Extensions.Caching.StackExchangeRedis
    services.AddStackExchangeRedisCache(options =>
    {
        options.Configuration = "你的Redis服务连接字符串";
    });
    services.AddSession(options =>
    {
        options.IdleTimeout = TimeSpan.FromHours(4);
        options.Cookie.HttpOnly = true;
        options.Cookie.IsEssential = true;
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:45:03