找出asp.net身份验证票证过期的原因

找出asp.net身份验证票证过期的原因,asp.net,asp.net-mvc,authentication,cookies,asp.net-membership,Asp.net,Asp.net Mvc,Authentication,Cookies,Asp.net Membership,我需要帮助弄清楚为什么我的身份验证票证在我托管的网站上大约一个小时后过期。但是如果我在本地运行该站点,身份验证票证将在正确的时间内保持活动状态 这是我的localhost web.config: <authentication mode="Forms"> <forms loginUrl="~/Account/LogOn" timeout="20160" slidingExpiration="true" path="/" /> </authentication

我需要帮助弄清楚为什么我的身份验证票证在我托管的网站上大约一个小时后过期。但是如果我在本地运行该站点,身份验证票证将在正确的时间内保持活动状态

这是我的localhost web.config:

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

这是我的托管web.config:

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

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

  • 我可以在浏览器中看到它
  • 即使关闭浏览器并重新打开,我仍保持登录状态
  • 即使在网站回收后,我仍保持登录状态(更改并保存web.config以回收它)
当我在浏览器中检查cookie过期日期时,它是2周后的。然而,大约一小时后,我的身份验证总是过期

我该怎么做才能弄清楚托管网站的身份验证为何会提前到期? 我不知道如何着手解决这个问题,因为只有我的托管网站有问题


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

我会尝试几种方法来解决此问题:

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

您是否询问过主机提供商machine.config是否将此设置为不同的值?machine.config上的设置将覆盖web.config

我在system.net中添加了一个machinekey条目。大概是这样的:

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


现在它让用户保持登录状态。然而,现在我似乎遇到了性能问题。以前加载页面大约需要500毫秒,现在大约需要两倍的时间。

是否确实是过期的票据而不是会话问题?我在这个网站上根本没有使用会话。所有东西都在cookie中的身份验证票证中。另外,会话与表单身份验证无关,是吗?您所指的身份验证票据/cookie就是会话。那个cookie“.ASPXAUTH”在服务器上维护会话。有趣的是,我不知道这一点。如果是这样的话,这似乎不是会话问题,因为当网站通过更改的web.config文件进行回收时,身份验证票证仍然有效。是的,他们向我展示了machine.config,我在其中没有看到任何身份验证部分。因此,我假设这意味着我的web.config值正在生效。我无法从IIS 7的链接中判断,但这会覆盖我在web.config中指定的设置吗?我不确定。但是你可能想尝试配置IISI,它有完全相同的问题,这就解决了它。我只指定了validationKey,它在没有性能损失的情况下完成了任务。我能给出的唯一解释是,自动生成的键(如果不指定显式键,则为默认键)由于某种原因不时发生变化。由于这方面的文档似乎非常糟糕,下面介绍如何做到这一点:在web.config中添加标记,并将validationKey设置为十六进制字符(0-9和a-F)的随机字符串。字符串的总长度应该正好是128个字符。我的喜悦还为时过早。问题仍然存在,因此添加显式validationKey根本没有帮助。除了转储整个FormsAuthentication文件并实现自定义身份验证系统之外,我不知道如何解决这个问题。我在system.web中找到了machinekey条目,而不是system.net。