我有一个 ASP.NET 应用程序,它似乎在一段时间后忘记了用户已登录。
我正在使用会员资格提供商,当选择“记住”登录时,它会在会话期间记住它。我什至可以关闭浏览器,重新启动并返回,它仍然会登录。但过了一段时间它就会忘记,而且似乎在任何旧时间都会这样做。我曾经登录过,当我进入新页面时,它就被注销了。
其他奇怪的事情是:
- 在我的开发机器上,它会永远记住登录信息。即使 IIS 重新启动并重新编译后,它也会按预期记住我的登录信息。
- 我在同一台服务器上有另一个应用程序,它会永远记住登录信息。我比较了它们处理登录的方式,它们似乎是相同的。
这使我相信该问题与服务器有关,或者可能与应用程序中与登录和会员代码不直接相关的某些内容有关。我可以看什么?
编辑:
使用 Fiddler 查找了 cookie,它们似乎没问题。
今天创建的身份验证 cookie 将在 2 周后过期,这就是我的配置的设置方式:
过期=2010 年 9 月 6 日星期一 01:47:51 GMT
编辑:
问题似乎是应用程序池正在回收,并且身份验证 cookie 变得无效,因为随着机器密钥的更改,它无法再被读取。解决方案是将 machineKey 段添加到 web.config 并提供静态计算机密钥。
主要有两种可能性。
Cookie 过期。如果 cookie 过期/消失,则您将被视为已注销。
Cookie 失效。登录 cookie 根据 machineKey 值进行加密。如果不指定machineKey,则每次应用程序池启动(或回收)时都会重新生成一个新的machineKey。这意味着使用旧 machineKey 加密的任何登录 cookie 现在都无效,并且您将不会被视为已登录。
检查 IIS 中应用程序池的回收设置,并查看其是否与您未登录的时间相对应。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)