.NET 7 IIS站点Cookie认证在应用回收/重启时丢失状态排查
问题分析与解决方案
这是典型的XY问题——你之前做的所有配置操作都和当前用户回收后被登出的问题无关。
根据.NET官方文档说明,单服务器部署的Cookie认证站点,无需额外配置数据保护即可在应用重启/回收后保留用户Cookie。因为Cookie本身存储在客户端,只要服务端的签名密钥未丢失(单服务器场景下.NET默认会自动持久化密钥),重启后就能正常验证Cookie的有效性,不会导致用户强制登出。
你遇到的实际问题根源在于:
- 自定义代码中使用了静态引用存储用户数据,并且在权限检查逻辑中依赖这个静态引用
- 应用回收后,静态变量会被重置清空,且你的代码没有在请求时重新从认证票据中加载用户信息,导致权限检查失败,最终表现为用户被“强制登出”
解决建议
- 移除用于存储用户信息的静态变量,改为在每次权限检查时直接从
HttpContext.User中读取当前用户的身份与权限数据 - 如果需要缓存用户数据以提升性能,使用
IDistributedCache或非静态的内存缓存实现,避免依赖静态变量的生命周期 - 检查自定义权限验证逻辑,确保每次请求都能从Cookie认证票据中重新解析用户信息,而非依赖预加载的静态数据
内容的提问来源于stack exchange,提问作者Whelkaholism
相关产品推荐
相关产品推荐

