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

.NET Core会话自动过期问题求助(使用Identity框架)

.NET Core Identity会话自动过期问题解决方案

问题描述

登录后无操作6-7分钟即被强制登出;编辑博客15分钟后提交表单,也会因会话过期跳转至登录页,严重影响业务流程。

核心原因

当前配置未显式设置Identity Cookie的有效期及滑动过期策略,默认的Cookie生命周期较短,无法满足业务场景需求。

解决方案

1. 配置Identity Cookie过期与滑动刷新

在AddIdentity配置后添加Cookie选项配置,调整有效期并开启滑动过期,确保用户活动时自动延长会话:

services.AddIdentity<User, Role>(options =>
{
    // 原有密码、锁定、登录配置保持不变
    options.Password.RequireDigit = true;
    options.Password.RequiredLength = Configuration.GetValue<int>("Application:Security:Password:RequiredLength");
    options.Password.RequireLowercase = Configuration.GetValue<bool>("Application:Security:Password:RequireLowercase");
    options.Password.RequireNonAlphanumeric = Configuration.GetValue<bool>("Application:Security:Password:RequireNonAlphanumeric");
    options.Password.RequireUppercase = Configuration.GetValue<bool>("Application:Security:Password:RequireUppercase");
    options.Password.RequiredUniqueChars = Configuration.GetValue<int>("Application:Security:Password:RequiredUniqueChars");
    options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(3);
    options.Lockout.MaxFailedAccessAttempts = 3;
    options.SignIn.RequireConfirmedEmail = true;
})
.AddEntityFrameworkStores<AppDbContext>()
.AddDefaultTokenProviders()
.AddErrorDescriber<TurkishIdentityErrorDescriber>();

// 新增Cookie配置
services.ConfigureApplicationCookie(options =>
{
    // 设置Cookie绝对过期时间,根据业务调整(示例为2小时)
    options.ExpireTimeSpan = TimeSpan.FromHours(2);
    // 开启滑动过期:用户有活动时自动刷新Cookie有效期
    options.SlidingExpiration = true;
    // 登录跳转路径(保持原有业务逻辑)
    options.LoginPath = "/Account/Login";
    // 权限不足跳转路径
    options.AccessDeniedPath = "/Account/AccessDenied";
});

2. 会话(Session)补充配置(若项目使用Session)

如果项目依赖Session存储用户状态,需同步配置Session有效期:

// 在ConfigureServices中添加Session配置
services.AddSession(options =>
{
    options.IdleTimeout = TimeSpan.FromHours(2); // 与Cookie过期时间保持一致
    options.Cookie.HttpOnly = true;
    options.Cookie.IsEssential = true;
});

然后在Configure方法中,于UseRouting之后、UseAuthentication之前启用Session:

app.UseRouting();
app.UseSession(); // 新增Session中间件
app.UseAuthentication();
app.UseAuthorization();

3. 多服务器部署的数据保护配置(可选)

若部署在多台服务器上,需配置数据保护密钥持久化,避免服务器间Cookie验证失败:

services.AddDataProtection()
    .PersistKeysToSqlServer(new SqlConnection(Configuration.GetConnectionString("SqlServer")))
    .SetDefaultKeyLifetime(TimeSpan.FromDays(90));

注意事项

  • 滑动过期可提升用户体验,但公共设备场景下需提醒用户及时登出,避免会话被延长带来安全风险。
  • 对于长时间编辑的表单,若用户无页面交互(纯离线编辑),可适当延长绝对过期时间,或在页面添加定时AJAX请求主动刷新会话。
  • 修改配置后需清除浏览器旧Cookie,确保新配置生效。

内容的提问来源于stack exchange,提问作者Ramazan Musluoğlu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:15:32