.NET 6+ASP.NET Identity部署后会话自动终止问题排查
排查Plesk部署后ASP.NET Identity会话自动终止的问题
1. Cookie配置问题(优先排查)
本地开发与生产环境的Cookie默认配置存在差异,Plesk环境下需显式配置Cookie的有效期与安全属性:
- 在
Program.cs中明确设置Cookie过期规则,避免默认会话级Cookie导致的快速失效:builder.Services.ConfigureApplicationCookie(options => { options.ExpireTimeSpan = TimeSpan.FromMinutes(60); // 自定义有效期,比如60分钟 options.SlidingExpiration = true; // 每次请求自动刷新Cookie有效期 options.Cookie.SameSite = SameSiteMode.Lax; // 若站点启用HTTPS,强制Cookie仅通过HTTPS传输 options.Cookie.SecurePolicy = CookieSecurePolicy.Always; }); - 检查Plesk站点是否开启HTTPS,若开启但未设置
CookieSecurePolicy,浏览器可能拒绝保存Cookie,直接导致会话丢失。
2. Plesk应用程序池回收策略
Plesk的IIS应用程序池若配置了短周期回收规则,会导致ASP.NET应用重启,进而使会话失效:
- 登录Plesk面板,进入对应站点的应用程序池设置:
- 查看「回收」选项,确认固定时间间隔是否被修改为短时长(默认1740分钟,若被改成5-10分钟会直接触发问题)
- 检查「私有内存限制」,若应用内存占用超限会自动回收,可适当调高限制或禁用该选项
- 确保「禁用重叠回收」未勾选,该选项可能导致会话在回收过程中丢失
3. 会话状态存储问题
若应用同时使用了Session功能,默认的InProc存储会在应用池回收时丢失数据:
- 若无需Session功能,直接移除
Program.cs中AddSession和UseSession相关代码 - 若需要Session,改用分布式存储(如Redis、SQL Server),避免依赖进程内存储
4. Plesk反向代理/URL重写干扰
Plesk的URL重写规则或反向代理配置可能导致Cookie的路径、域名参数异常:
- 检查Plesk的「URL重写」规则,确保未修改Cookie的路径或域名属性
- 若站点使用了反向代理(如Cloudflare),需在
Program.cs中配置转发头:
同时在Plesk中开启「转发真实IP」选项app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto });
5. 机器密钥(Machine Key)一致性问题
ASP.NET应用重启或多实例部署时,需统一的机器密钥来加密/解密Cookie,否则重启后无法识别原有Cookie:
- 在Plesk站点的「ASP.NET设置」中,找到「机器密钥」选项,生成并设置固定的验证密钥与加密密钥
- 也可手动在
web.config中添加配置:<system.web> <machineKey validationKey="生成的验证密钥" decryptionKey="生成的解密密钥" validation="SHA1" decryption="AES" /> </system.web>
6. 登录页面的持久Cookie设置
确认登录时是否正确提交了RememberMe选项,若未勾选,Cookie会是会话级(关闭浏览器即失效),虽不是几秒失效的直接原因,但需排查:
- 确保登录方法中
SignInAsync的参数正确:await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: false);
建议先从Cookie配置和应用程序池回收策略入手排查,这是Plesk部署场景下最常见的触发原因。若需要进一步定位,可提供完整的Program.cs代码或Plesk应用程序池配置截图。
内容的提问来源于stack exchange,提问作者mesut yıldırım
相关产品推荐
相关产品推荐

