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

ASP.NET MVC项目Cookie认证问题:未勾选记住我时闲置超时登出

解决ASP.NET MVC「记住我」Cookie登录的闲置超时问题

你的核心问题是用短过期时间实现「未勾选记住我」的场景,导致用户闲置就超时。正确做法应该用会话Cookie(浏览器关闭即失效)来满足需求,同时保留合理的活跃超时时间。

问题根源

你给未勾选「记住我」的情况设置了30秒ExpiresUtc,再加上SlidingExpiration = true,只要用户30秒没操作,Cookie就会过期,自然被导向登录页。而「关闭网站后清除登录状态」的需求,本质是用会话级Cookie——这种Cookie不会持久化到磁盘,浏览器关闭就自动删除,根本不需要设置短过期时间。

具体修改方案

1. 修正Login控制器的AuthenticationProperties逻辑

去掉未勾选时的短过期设置,改为设置IsPersistent = false(会话Cookie),勾选时才配置持久化和30天过期:

// AccessController/Login的修正代码
AuthenticationProperties authProperties;
if (loginViewModel.KeepLoggedIn) 
{
    authProperties = new AuthenticationProperties
    {
        IsPersistent = true,
        ExpiresUtc = DateTimeOffset.UtcNow.AddDays(30)
    };
} 
else 
{
    authProperties = new AuthenticationProperties
    {
        IsPersistent = false // 会话Cookie,浏览器关闭即失效
        // 无需设置ExpiresUtc,使用默认活跃超时
    };
}

// 登录时传入该配置
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal, authProperties);

2. 调整Program.cs的Cookie配置

给会话Cookie设置合理的活跃超时时间(比如2小时),保证用户活跃期间不会因闲置超时,仅在关闭浏览器时清除登录状态:

builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(option =>
    {
        option.EventsType = typeof(CustomCookieAuthenticationEvents);
        option.SlidingExpiration = true; // 用户操作时自动续期Cookie
        option.ExpireTimeSpan = TimeSpan.FromHours(2); // 未勾选时的闲置超时(2小时无操作才登出)
        option.Cookie.IsPersistent = false; // 默认会话Cookie,登录时通过AuthenticationProperties覆盖
    });

原理说明

  • 当IsPersistent = false时,Cookie为会话Cookie:浏览器不会将其保存到磁盘,关闭后自动删除,完美匹配「未勾选记住我则关闭网站清除登录状态」的需求。
  • ExpireTimeSpan = TimeSpan.FromHours(2)设置会话Cookie的活跃超时:用户2小时内无操作才会登出,搭配SlidingExpiration = true,每次操作都会自动续期超时时间,避免闲置短时间就被踢。
  • 勾选「记住我」时,通过AuthenticationProperties设置IsPersistent = true和ExpiresUtc,会覆盖默认配置,生成持久化到磁盘的Cookie,30天后才过期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:55:27