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 消失了,从而导致解密失败。