2010-01-10 33 views
1

我在ASP.NET 3.5中使用表單身份驗證。ASP.NET App Pool關閉用戶註銷日誌

我注意到,當我的應用程序池回收(每1.5小時)時,認證的用戶身份驗證wuth Forms身份驗證(具有身份驗證cookie)關閉,並且必須重新登錄。

如何避免這種情況?

回答

3

您的會話模式設置爲InProc,這意味着它綁定到該W3WP實例並在重新啓動時刷新。 (至少在IIS6上,不知道IIS7)

改爲使用StateServer或SqlServer。

Check the MSDN Documentation about sessionState,特別是關於Session-State Modes的文章。

編輯: Paulo提出了一個很好的評論:InProc會話可以存儲幾乎所有的對象,而StateServer和SqlServer要求它們是Serializable。另外,我想補充一點,它們比較慢 - 當存儲在內存中時無法擊敗InProc會話的速度。另一方面:如果您需要爲您的應用程序添加負載平衡,則使用State/SqlServer將使您受益。所有模式都有優點和缺點,你必須在這裏選擇一種毒藥。

+1

真,但使用的StateServer或SQLServer的國家提供者,減少存儲的任何對象會話的能力。只有Seri​​alizable對象可以這種方式存儲。取決於應用程序,它可能會對其產生巨大影響。 – 2010-01-10 22:32:45

+0

非常真實。它也可以顯着降低性能 - 你必須在這裏挑選你的毒藥。 – 2010-01-10 22:34:03

+0

我正在尋找這個問題的解決方案,並沒有發現將我的sessionstate模式設置爲「StateServer」幫助。我的會話信息(即HttpContext.Current.Session中的所有內容)都已保存,但HttpContext.Current.User爲空,而HttpContext.Request.IsAuthenticated爲false。 – Kyle 2012-03-21 15:12:43