2012-02-01 112 views
3

我正在使用web.config中具有以下超时值的遗留系统。ASP.NET超时问题

<sessionState timeout="120" /> 
... 
<forms name="login" timeout="240" /> 

我也有以下实现,以防止空会话变量问题。这里的通用版本:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

    If Not IsPostBack Then 
     Session("DocNum") = "" 
    Else 
     If Session("DocNum") Is Nothing Then 
      Response.Redirect("~/index.aspx?e=SessionExpired") 
     End If 
    End If 

End Sub 

看来,会话变量被清除以及下120分钟,尽管许多用户在系统上设置。这似乎正在经常发生。

我读过应用程序池可能会造成这种情况,但是怎么样?其他配置和超时值可能导致此问题?

感谢您的帮助。

+0

是您的会话状态设置为InProc?如果是这样,应用程序池重置会导致此问题。 – 2012-02-01 19:07:00

回答

3

如果您的会话状态设置为InProc,则应用程序池的回收设置可能会重置清除会话​​的App Pool。 “InProc”表示会话存储在内存中,因此,任何应用程序池重置都会丢失会话中存储的内容。您可以检查Web服务器的系统事件日志,以查看是否有任何由于定期的回收计划或错误而导致应用程序池回收的事件。

+0

默认应用程序池空闲超时时间为20分钟。如果你想让会话持续更长的时间,你必须增加这个值。 http://www.iis.net/ConfigReference/system.applicationHost/applicationPools – pseudocoder 2012-02-01 19:25:07

+0

@pseudocoder,即使正在使用应用程序,空闲超时也会终止会话? – JSuar 2012-02-01 19:34:50

+0

如果您使用“InProc”,是的。 – 2012-02-01 19:37:04