什么原因会导致asp.net应用程序忘记用户?

4
我有一个asp.net应用程序,在一段时间后似乎会忘记用户已登录。
我使用成员资格提供程序,当选择“记住”登录时,它在会话期间记住它。我甚至可以关闭浏览器,重新启动并返回,它仍然会保持登录状态。但是过了一段时间后,它就会忘记,而且似乎是在任何时间都可能发生。有一次我登录后,当我转到新页面时,它就退出了登录。
其他奇怪的事情是:
1. 在我的开发机器上,它会永久记住登录状态。即使IIS重新启动和重新编译,它也会按预期记住我的登录状态。 2. 我在同一台服务器上还有另一个应用程序,它可以永远记住登录状态。我比较了它们如何处理登录,它们似乎是相同的。
这让我相信问题与服务器或可能与登录和成员资格代码不直接相关的应用程序中的某些内容有关。我该看什么?
编辑: 使用Fiddler查找了cookie,它们似乎没问题。 今天创建的身份验证cookie将在两周后过期,这是我的配置设置方式:expires=Mon, 06-Sep-2010 01:47:51 GMT
编辑: 问题似乎是应用程序池正在回收,身份验证cookie变得无效,因为它无法再读取,因为机器密钥已更改。解决方法是在web.config中添加machineKey段并提供静态machineKey。

记住我(Remember me)功能是基于 cookie 实现的。因此,我需要诊断 cookie 的生命周期。 - Ladislav Mrnka
我查看了一下 cookie,它的过期时间是未来的两周。 - dtc
只有一台生产机器还是负载均衡了? - Clarence Klopfstein
是的,只有一个服务器。我正在查看应用程序回收和机器密钥,正如其中一个答案所建议的那样。但是,我不确定为什么我会在一个服务器上看到这个问题,而在另一个服务器上却没有。两者都定期回收应用程序池。 - dtc
2个回答

4
有两种可能性。
1. Cookie过期。如果cookie过期/消失,则您将被视为已注销。
2. Cookie无效。登录cookie是基于machineKey值加密的。如果未指定machineKey,则每次应用程序池启动(或重新启动)时都会重新生成一个新的machineKey。这意味着任何使用旧machineKey加密的登录cookie现在都无效,并且您不会被视为已登录。
检查一下您在IIS中的应用程序池的回收设置,看看它是否与您未登录的时间相对应。

我检查了Cookie的过期时间,看起来没问题(像预期的那样在两周后过期)。你写的第二个条目似乎是我所看到的。我想我应该阅读一些关于登录Cookie和MachineKey的文章。 - dtc
Cookie失效似乎是原因。我在web.config中添加了一个静态machineKey,它还没有忘记我的登录信息。 - dtc

3

“记住我”功能是使用cookies实现的。Cookies可以设置过期日期。您需要查看cookie的设置方式(Fiddler很适合此任务,您可以在设置cookie时检查HTTP标头)。


过期日期似乎没问题。我正在研究机器密钥和应用程序池回收,正如另一个人所提到的。看起来是我所看到的问题,但不确定为什么一个应用程序会受到影响而另一个应用程序却没问题。 - dtc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接