ASP.NET MVC 使用 FormsAuthentication 保存的用户登录凭证总是很快就失效了
问题
使用 FormsAuthentication.Encrypt
加密的 FormsAuthenticationTicket
,总是在一小段时间后 (没注意统计,大概在 20 分钟左右) 就自动失效了,但我设置的 Cookie
失效时间为 30 天。Cookie
中该 Ticket
还在,但是在 Decrypt
的时候失败。具体什么错误也不清楚(猜测是【无法验证数据 / Unable to validate data】)。Decrypt
失败后结果是空,权限验证失败。
对策
参照多个服务器共享 Form
验证,使用了固定的 machineKey
( validationKey
和 decryptionKey
)之后,问题貌似解决了。
原因
猜测是因为没有固定设置 machineKey
时,会随机生成(保存在哪里不清楚)key
,而且在固定时间后这个 key
消失了,从而导致解密失败。