【问题标题】:figuring out why asp.net authentication ticket is expiring找出 asp.net 身份验证票证过期的原因
【发布时间】:2009-05-17 06:04:09
【问题描述】:

我需要帮助找出我的身份验证票证在我托管的网站上大约一个小时后过期的原因。但是,如果我在本地运行该站点,则身份验证票证会在正确的时间内保持活动状态。

这是我的本地主机 web.config:

<authentication mode="Forms">
    <forms loginUrl="~/Account/LogOn" timeout="20160" slidingExpiration="true" path="/" />
</authentication>

这是我托管的 web.config:

<authentication mode="Forms">
    <forms loginUrl="~/Account/LogOn" timeout="20160" slidingExpiration="true" domain=".mywebsite.com" path="/" />
</authentication>

我知道正在创建身份验证票证,因为:

  • 我可以在浏览器 cookie 中看到它
  • 即使在关闭浏览器并重新打开后我仍然保持登录状态
  • 即使在网站回收(更改并保存 web.config 以回收它)后,我仍然保持登录状态

当我在浏览器中查看 cookie 过期日期时,已经是 2 周后。但是,大约一个小时后,我的身份验证总是过期。

我该怎么做才能弄清楚为什么托管网站的身份验证会过早到期? 我不知道如何解决这个问题,因为我的托管网站是唯一有问题的网站。

更新 1:等待 1 小时后,我检查浏览器,发现 cookie 仍然存在。事实上,它的到期日期设置为 2 周后。但是,如果我重新加载页面或尝试访问任何需要身份验证的页面,我将被带到登录页面。

【问题讨论】:

  • 肯定是票证到期而不是会话问题?
  • 我在这个站点上根本没有使用会话。一切都在 cookie 中的身份验证票中。另外,会话与表单身份验证没有任何关系吗?
  • 您所指的身份验证票证/cookie - 是会话。该 cookie ".ASPXAUTH" 在服务器上维护会话。
  • 有趣,我不知道。如果是这种情况,它似乎不是会话问题,因为当网站通过更改的 web.config 文件进行回收时,身份验证票仍然有效。

标签: asp.net asp.net-mvc authentication cookies asp.net-membership


【解决方案1】:

我在 system.net 中添加了一个机器密钥条目。像这样的:

    <machineKey validationKey="aaa"
    decryptionKey="bbb" validation="SHA1" />

现在它使用户保持登录状态。但是,现在看来我遇到了性能问题。以前加载页面大约需要 500 毫秒,现在大约需要两倍的时间。

【讨论】:

  • 我遇到了完全相同的问题,这解决了它。我只指定了validationKey,它在没有性能损失的情况下完成了这个技巧。我能想到的唯一解释是自动生成的密钥(如果您不指定显式密钥,这是默认密钥)不时因某种原因发生变化。因为这方面的文档似乎真的很差,这里是如何做到这一点:在 web.config 的 中添加 标记并将validationKey 设置为十六进制字符的随机字符串(0-9 和 A-F) .字符串的总长度应该正好是 128 个字符。
  • 我的喜悦还为时过早。问题仍然存在,因此添加显式验证密钥毕竟没有帮助。除了转储整个 FormsAuthentication 东西并实现自定义身份验证系统之外,不知道如何解决这个问题。
  • 我在 system.web 而不是 system.net 中找到了 machinekey 条目。
【解决方案2】:

我会尝试几件事来解决这个问题:

  • 本地主机和主机之间的 IIS 版本和设置。应用程序池设置很可能存在一些差异
  • 在 IIS 7 中,对此有一个特殊设置:read here

【讨论】:

  • 我无法从 IIS 7 的链接中得知,但这会覆盖我在 web.config 中指定的设置吗?
  • 我不确定。但您可能想尝试配置 IIS
【解决方案3】:

您是否询问过您的托管服务提供商 machine.config 是否将此设置为不同的值? machine.config 上的设置将覆盖 web.config。

【讨论】:

  • 是的,他们向我展示了 machine.config,但我没有在其中看到任何身份验证部分。所以我假设这意味着我的 web.config 值正在生效。
猜你喜欢
  • 1970-01-01
  • 2011-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多