6

我收到了来自我的用户的报告和投诉,他们将使用屏幕并立即将其踢回登录屏幕请求。它不会一直发生,而是随机发生。查看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的应用程序配置中定义)。我读过一些说你应该认证超时比会话超时(45)更短(40)以避免可能的复杂性。无论哪种方式,我们都有用户在最后一次操作后的一两分钟内被踢到登录屏幕。所以会议绝对不应该过期。

更新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园的时候,我都在这两个web.config文件中设置机器键值为了方便起见,请删除:

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

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

任何帮助,这将不胜感激。这似乎是产生大量谷歌搜索结果的问题之一,但这些问题似乎都不符合我目前的情况。

+0

65位软件! \ o/ – Bombe 2009-02-19 14:16:17

+0

@这是什么结果呢? – 2009-11-06 04:46:08

+0

任何人都知道这一点?我有一个单节点(非集群)网站,升级到ASP.NET MVC4 RC后,我开始出现这个错误 - 所有用户在工作进程回收后退出。我的其他应用程序都不受影响。 – ShadowChaser 2012-07-06 03:51:36

回答

0

1.)检查您的iis过程多久回收一次。 (打开loggingcheck your settings)。在循环后,使用proc会话存储中的默认值,会话将丢失。

2.)您的应用程序是否会产生可能会抛出异常的线程(这些线程不会向用户显示)?因为如果这种情况存在,i就会更频繁地回收过程。

2

也可能需要检查应用程序池的Maximum Worker Processes属性。如果您在内存会话中使用并且拥有多个作为最大工作进程的用户,则可以查找会话问题,因为用户请求由不知道其会话的其他线程处理。

1

既然您已经注意到您正在为您的站点使用非常具体的FQDN,那么您是否有任何其他.Net应用程序在相同的FQDN下运行不同的虚拟路径?两个应用程序的auth cookie的名称可能相同,但令牌将不同。因此,如果我登录到www.domain.com,然后登录到www.domain.com/app2,我将不再拥有app1的正确身份验证。

0

我刚刚完成处理这个确切的问题,正如问题中所述,并且问题是web.config中的一些缺失配置。

使用formsAuthentication时,您需要停止进行会话处理验证,因为cookie现在负责处理它。

这行需要在你的web配置添加(或更新),在“System.Web程序”元素

<sessionState mode="Off"> 

的sessionState和formsAuthentication不都应该是积极的。我不明白他们如何互相干扰的细节,但在这种情况下,它会随机产生随机用户的随机注销。

0

我们的网站多年来一直存在同样的问题,但昨天我们发现了一个修复程序,请参阅my question。作为一个评论者建议,我尝试添加这web.config中:

<sessionState mode="InProc" timeout="60" /> 

显然,超时都必须在的sessionState并在车票进行设置。又见毫秒https://msdn.microsoft.com/en-us/library/ms178586.aspx

实况为了更准确地测量实际的超时时间,而在调试模式下,我发现它很方便的在文件Global.asax.cs的方法Session_Start()Session_End()添加Debug.WriteLine呼叫,毫秒时添加使用

string.Format("{0:HH:mm:ss.fff} - {1}", DateTime.Now, strMessage); 

,以便您可以登录,享用午餐,让会话超时,并在VisualStudio输出窗口的某个适当时刻阅读时间戳。