2012-02-01 117 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