ASP.NET MVC认证Cookie自动登出问题求助
验证
requireSSL配置的影响
web.config中设置了requireSSL="true",若生产环境未配置HTTPS,浏览器会拒绝保存RememberMe=true时的持久化Cookie。先确认服务器是否正确配置SSL证书,确保所有请求走HTTPS;临时测试可将requireSSL改为false,观察是否仍频繁登出。检查机器密钥(MachineKey)配置
生产环境若为多服务器部署或应用池频繁回收,未固定MachineKey会导致加密Cookie无法正确解密,触发登出。在web.config的<system.web>节点下添加固定密钥:<machineKey validationKey="生成的随机密钥" decryptionKey="生成的随机密钥" validation="SHA1" decryption="AES" />密钥可通过工具生成,注意保密。
确认Cookie实际过期时间
打开浏览器开发者工具(F12)的Application/Storage标签,找到LightOilManagerCookie,查看Expires/Max-Age值。若RememberMe=true但Cookie仍为会话级(关闭浏览器即过期),检查login.RememberMe是否正确传值(比如前端表单是否绑定该字段)。排查应用池回收与会话状态
检查Plesk应用池回收设置,是否存在固定时间回收、内存阈值过低导致频繁回收的情况。应用池回收会重置Session,若代码依赖Session逻辑,可能间接引发登出。若使用InProc会话模式,建议改用StateServer或SQLServer模式(需Session支持时)。检查Cookie路径与域配置
当前<forms>节点未设置path和domain,默认路径为/,但网站有虚拟目录或子域名时,可能导致Cookie无法正确传递。可显式配置:<forms name="LightOilManager" loginUrl="/Customer/Home/Login" defaultUrl="/" timeout="43200" requireSSL="true" path="/" domain="你的域名" />验证
timeout参数实际生效timeout="43200"对应30天,属于正常范围。Forms认证默认滑动过期,用户活跃会刷新超时时间。检查代码中是否手动设置Cookie过期时间,或其他地方覆盖了认证配置。
内容的提问来源于stack exchange,提问作者Milad-PC

