在达到会话和身份验证票证超时值之前,用户被迫随机重新登录

Don*_*Don 6 authentication session iis-6 forms-authentication asp.net-2.0

我正在收到用户的报告和投诉,他们将使用屏幕并在下次请求时立即返回登录屏幕.它不会一直发生,而是随机发生.查看Web服务器后,应用程序事件日志中显示的错误是:

事件代码:4005事件消息:请求的表单身份验证失败.原因:提供的故障单已过期.

我读到的一切都是从人们询问网络花园或负载平衡开始的.我们没有使用其中任何一种.我们是一个带有IIS6的Windows 2003(32位操作系统,64位硬件)服务器.这是该服务器上唯一的网站.

此行为不会向用户生成任何应用程序异常或可见问题.他们刚刚被启动回登录屏幕并被迫登录.你可以想象这对我们的用户来说非常烦人并且适得其反.

这是我在web.config中为root中的应用程序设置的内容:

<authentication mode="Forms">
      <forms name=".TcaNet"
        protection="All"
        timeout="40"
        loginUrl="~/Login.aspx"
        defaultUrl="~/MyHome.aspx"
        path="/"
        slidingExpiration="true"
        requireSSL="false" />
    </authentication>
Run Code Online (Sandbox Code Playgroud)

我还读到,如果你有一些不再存在的位置设置或者是假的,你可能会遇到问题.我的路径属性都是有效的目录,所以不应该是问题:

<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>
Run Code Online (Sandbox Code Playgroud)

我唯一不清楚的是,我的auth票证的forms属性中的超时值是否必须与我的会话超时值(在IIS中的应用程序配置中定义)相同.我读过一些事情,说你应该让认证超时(40)比会话超时(45)更短,以避免可能出现的并发症.无论哪种方式,我们都有用户在最后一次操作后的一两分钟内被踢到登录屏幕.所以会议肯定不会到期.

更新2/23/09:我已经将会话超时和身份验证票据超时值设置为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>
Run Code Online (Sandbox Code Playgroud)

虽然我不相信它适用,除非你在网络花园中,我在两个web.config文件中设置的两个机器键值都是相同的(为方便起见,删除):

<machineKey 
        validationKey="<MYVALIDATIONKEYHERE>" 
        decryptionKey="<MYDECRYPTIONKEYHERE>" 
        validation="SHA1" />

<machineKey 
        validationKey="<MYVALIDATIONKEYHERE>" 
        decryptionKey="<MYDECRYPTIONKEYHERE>" 
        validation="SHA1"/>
Run Code Online (Sandbox Code Playgroud)

任何有关这方面的帮助将不胜感激.这似乎是产生大量Google结果的问题之一,到目前为止,这些问题似乎都不符合我的情况.

Tob*_*orn 0

1.) 检查您的 iis 进程被回收的频率。(打开日志记录检查您的设置)。回收后,使用 proc 会话存储中的默认值,会话将丢失。

2.) 您的应用程序是否生成可能引发异常的线程(顺便说一句,这些线程不会向用户显示)?因为如果存在这种情况,iis 会更频繁地回收进程。