什么可能导致asp.net应用程序忘记用户?

时间:2010-08-22 20:08:13

标签: asp.net authentication

我有一个asp.net应用程序似乎忘记了用户在一段时间后登录。

我正在使用会员提供商,当选择“记住”登录时,它会在会话期间记住它。我甚至可以关闭浏览器,重新启动并返回它仍然会登录。但过了一段时间它会忘记它似乎在任何过去的时间都会这样做。我曾经登录过,当我进入新页面时,它已被注销。

其他奇怪的事情是:

  1. 在我的开发机器上,它会永远记住登录。即使在IIS重新启动并重新编译之后,它也会按预期记住我的登录信息。
  2. 我在同一台服务器上有另一个应用程序,它永远记住了登录。我比较了他们如何处理登录,他们似乎完全相同。
  3. 这让我相信这个问题与服务器有关,或者应用程序中的某些东西与登录名和会员代码没有直接关系。我能看到什么?

    编辑: 使用Fiddler查找cookie并且它们似乎没问题。 今天创建的身份验证cookie将在2周后到期,这是我的配置设置方式: expires =周一,06-Sep-2010 01:47:51 GMT

    编辑: 问题似乎是应用程序池正在回收,并且身份验证cookie变得无效,因为在机器密钥已更改时无法再读取它。解决方案是将machineKey段添加到web.config并提供静态机器密钥。

2 个答案:

答案 0 :(得分:4)

有两种主要的可能性。

  1. Cookie过期。如果cookie过期/消失,那么您将被视为已退出。

  2. Cookie失效。登录cookie根据machineKey值加密。如果未指定machineKey,则每次应用程序池启动(或循环使用)时都会重新生成一个新计算机。这意味着使用旧machineKey加密的任何登录cookie现在都无效,您将不会被视为已登录。

  3. 检查IIS中应用程序池上的回收设置,看看它是否与您未登录的时间相对应。

答案 1 :(得分:3)

“记住我”功能是使用cookie完成的。 Cookie可以设置到期日期。您需要了解如何设置cookie(Fiddler对此有好处,您可以在设置cookie时检查HTTP标头。)