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

ASP.NET Core Identity能否通过Cookie实现IIS进程回收后自动重登

问题解决方案

核心原因

你遇到的IIS应用池回收后用户全员登出的问题,和Cookie有效性、会话配置无关,根源是ASP.NET Core默认的Data Protection密钥为进程内存储,应用池重启/回收后密钥丢失,无法解密客户端留存的Identity.Application加密Cookie,导致系统判定用户未登录。你的原有登录逻辑、Cookie配置均无问题,需求本身不存在逻辑缺陷,仅需补充密钥持久化配置即可解决。

适配.NET Core 3.1的修复步骤

1. 新增Data Protection持久化配置

在Startup.cs的ConfigureServices方法中新增如下配置,将加密密钥持久化到本地非公开目录:

using Microsoft.AspNetCore.DataProtection;
using System.IO;

// 建议放在服务注册逻辑的靠前位置
services.AddDataProtection()
    // 替换为你站点下的非公开可写目录,推荐使用App_Data下的独立目录,提前给站点运行身份授予读写权限
    .PersistKeysToFileSystem(new DirectoryInfo(Path.Combine(Env.ContentRootPath, "App_Data", "Keys")))
    // 自定义密钥有效期,到期会自动生成新密钥,旧密钥仍会保留用于解密历史Cookie
    .SetDefaultKeyLifetime(TimeSpan.FromDays(180));

注意:确保App_Data/Keys目录未放在wwwroot公开目录下,避免密钥文件被外部直接下载。

2. 无需额外修改原有逻辑

Identity的Cookie认证为无状态设计,本身不依赖服务端Session存储,只要密钥可正常解密Cookie,SignInManager和UserManager就可以自动读取到当前登录用户信息,完全不需要额外开发自动重登逻辑。

3. 效果验证

配置完成部署后,手动重启对应IIS应用池,刷新已登录的页面,即可看到用户仍保持登录状态,不再受5分钟应用池回收的影响,原有3天滑动有效期的配置会正常生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 17:36:00