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

ASP.NET 6 Core Blazor Server配置长会话仍20分钟超时如何解决

问题根因

你修改的两个配置项都不控制Blazor Server的会话存活逻辑,20分钟超时是Blazor Server默认电路配置+身份认证Cookie默认过期共同导致的:

  • web.config中配置的requestTimeout是IIS对单个请求的最长执行时长限制,和用户会话空闲断开、登录状态保持完全无关
  • AddSession配置的是传统ASP.NET Core会话中间件的超时,Blazor Server基于实时电路(Circuit)实现有状态会话,默认不依赖该中间件判定会话存活,修改该参数不生效
  • Blazor Server的CircuitOptions.IdleTimeout默认值为20分钟,即用户无任何交互20分钟后电路会被自动销毁,这是你遇到超时的核心原因;如果启用了身份认证,认证Cookie默认过期时间也为20分钟,同样会触发登录超时。
修复配置

1. 修改Blazor Server电路空闲超时

在Program.cs中配置Blazor Server电路选项,将空闲超时设置为12小时:

builder.Services.AddServerSideBlazor()
    .AddCircuitOptions(opt =>
    {
        // 核心配置:电路空闲12小时无交互才自动销毁
        opt.IdleTimeout = TimeSpan.FromHours(12);
        // 连接断开后保留电路等待用户重连的时长,可根据内网网络情况调整
        opt.DisconnectTimeout = TimeSpan.FromMinutes(5);
        // JS互操作调用默认超时时间,可按需调整
        opt.JSInteropDefaultCallTimeout = TimeSpan.FromMinutes(10);
    });

2. 同步修改身份认证Cookie过期时间(若启用了登录认证)

如果你的应用需要登录后访问,必须同步修改认证Cookie的过期时间,否则Cookie过期后用户依然会被跳转至登录页:

// 若使用原生Cookie认证
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(opt =>
    {
        opt.ExpireTimeSpan = TimeSpan.FromHours(12);
        opt.SlidingExpiration = true; // 开启滑动过期,用户有操作时自动续期有效期
    });

// 若使用ASP.NET Core Identity,替换为以下配置
builder.Services.ConfigureApplicationCookie(opt =>
{
    opt.ExpireTimeSpan = TimeSpan.FromHours(12);
    opt.SlidingExpiration = true;
});

3. 修正web.config配置错误

你当前web.config中的AspNetCore模块名配置错误,ASP.NET Core 3.0及以上版本使用AspNetCoreModuleV2模块,修正后的handlers节点如下:

<handlers>
  <add name="aspNetCore"
       path="*"
       verb="*"
       modules="AspNetCoreModuleV2"
       resourceType="Unspecified" />
</handlers>

aspNetCore节点下的requestTimeout参数无需修改,该参数仅限制单个请求的最长执行时间,不影响会话空闲超时。

4. 检查中间件顺序

确保Program.cs中的中间件顺序符合规范,顺序错误会导致配置失效,参考正确顺序:

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
// 认证、授权中间件必须放在MapBlazorHub之前
app.UseAuthentication();
app.UseAuthorization();
// 无特殊需求可以不调用UseSession,Blazor Server不依赖该中间件
// app.UseSession();
app.MapBlazorHub();
app.MapFallbackToPage("/_Host");
app.Run();

注意:Blazor Server的电路会占用服务器内存资源,12小时的长超时配置仅适合内网小用户量场景,若用户规模较大建议搭配滑动过期策略,平衡用户体验和服务器资源开销。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:06:20