我收到来自我的用户的报告和投诉,他们将使用屏幕并在下一次请求时立即被踢回登录屏幕。它不会一直发生,而是随机发生。查看 Web 服务器后,应用程序事件日志中显示的错误是:
事件代码:4005 事件消息:请求的表单身份验证失败。原因:提供的票已过期。
我阅读的所有内容都是从人们询问网络花园或负载平衡开始的。我们没有使用其中任何一个。我们是带有 IIS6 的单一 Windows 2003(32 位操作系统,64 位硬件)服务器。这也是该服务器上唯一的网站。
此行为不会对用户产生任何应用程序异常或可见问题。他们只是被引导回到登录屏幕并被迫登录。正如您可以想象的那样,这对我们的用户来说非常烦人和适得其反。
这是我在 web.config 中为根中的应用程序设置的内容:
<authentication mode="Forms">
<forms name=".TcaNet"
protection="All"
timeout="40"
loginUrl="~/Login.aspx"
defaultUrl="~/MyHome.aspx"
path="/"
slidingExpiration="true"
requireSSL="false" />
</authentication>
我还读到,如果您的某些位置设置不再存在或者是虚假的,您可能会遇到问题。我的路径属性都是有效的目录,所以这不应该是问题:
<location path="js">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
<location path="images">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
<location path="anon">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
<location path="App_Themes">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
<location path="NonSSL">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
我唯一不清楚的是,我在表单属性中的身份验证票的超时值是否必须与我的会话超时值(在 IIS 中的应用程序配置中定义)相同。我读过一些东西说你应该让身份验证超时(40)比会话超时(45)更短,以避免可能的并发症。无论哪种方式,我们都有用户在他们最后一次操作后一两分钟被踢到登录屏幕。所以会话绝对不应该过期。
2009 年 2 月 23 日更新:我已经将会话超时和身份验证票证超时值都设置为 45,问题似乎仍然存在。
应用程序中唯一的其他 web.config 位于托管社区服务器的 1 个虚拟目录中。该 web.config 的身份验证设置如下:
<authentication mode="Forms">
<forms name=".TcaNet"
protection="All"
timeout="40"
loginUrl="~/Login.aspx"
defaultUrl="~/MyHome.aspx"
path="/"
slidingExpiration="true"
requireSSL="true" />
</authentication>
虽然我不认为它适用,除非您在网络花园中,但我将两个 web.config 文件中的机器键值设置为相同(为方便起见已删除):
<machineKey
validationKey="<MYVALIDATIONKEYHERE>"
decryptionKey="<MYDECRYPTIONKEYHERE>"
validation="SHA1" />
<machineKey
validationKey="<MYVALIDATIONKEYHERE>"
decryptionKey="<MYDECRYPTIONKEYHERE>"
validation="SHA1"/>
对此的任何帮助将不胜感激。这似乎是产生大量谷歌结果的问题之一,到目前为止,这些结果似乎都不适合我的情况。