【问题标题】:What could cause an asp.net application to forget a user?什么可能导致 asp.net 应用程序忘记用户?
【发布时间】:2010-08-24 14:43:23
【问题描述】:

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

I'm using the membership provider and when opt to "remember" the log in it remembers it during the session.我什至可以关闭浏览器,重新启动并返回,它仍然会登录。但过了一会儿它就忘记了,它似乎在任何旧时间都会这样做。我曾经登录过,当我进入一个新页面时,它被注销了。

其他奇怪的是:

  1. 在我的开发机器上,它会永远记住登录。即使在 IIS 重新启动并重新编译后,它也会按预期记住我的登录信息。
  2. 我在同一台服务器上有另一个应用程序可以永久记住登录。我比较了它们处理登录的方式,它们似乎是相同的。

这让我相信问题与服务器有关,或者可能与应用程序中的某些问题有关,与登录和会员代码没有直接关系。我可以看什么?

编辑: 使用 Fiddler 查找 cookie,它们似乎没问题。 今天创建的身份验证 cookie 将在 2 周后过期,这就是我的配置设置方式: expires=2010 年 9 月 6 日星期一 01:47:51 GMT

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

【问题讨论】:

  • 记住我功能是基于cookie的。所以我会诊断 cookie 生命周期。
  • 我看了一下cookie,它的到期时间是未来2周。
  • 只有一台生产机器还是负载均衡?
  • 是的,它只有 1 台服务器。我正在查看答案之一推荐的应用程序回收和机器密钥。但是,我不确定为什么我会在一台服务器上看到这个问题,而不是在另一台服务器上。两者都定期回收应用程序池。

标签: asp.net authentication


【解决方案1】:

有两种主要的可能性。

  1. Cookie 过期。如果 cookie 过期/消失,则认为您已注销。

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

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

【讨论】:

  • 我检查了 cookie 的过期时间,看起来没问题(如预期的那样在 2 周内过期)。你写的第二个项目似乎就是我所看到的。我想我应该阅读一下登录 cookie 和 machinekey。
  • Cookie 失效似乎是原因。我在 web.config 中添加了一个静态 machineKey,它还没有忘记我的登录信息。
【解决方案2】:

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

【讨论】:

  • 有效期好像还可以。正如另一个人提到的那样,我正在研究机器密钥和应用程序池回收。似乎是我所看到的,但不确定为什么一个应用会受到影响而另一个很好。
猜你喜欢
  • 2010-10-16
  • 2012-11-21
  • 2011-12-29
  • 1970-01-01
  • 2012-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-20
相关资源
最近更新 更多