2010-07-16 178 views
2

在此論壇中,有人提出了有關會話超時的問題。如果有人能夠再次澄清這一點,將不勝感激。ASP.NET 2.0會話超時

我有一個asp.net 2.0應用程序,如果用戶沒有做任何活動並按下頁面上的按鈕(他被重定向到sessionExpired.aspx頁面),說15-20分鐘後超時。我在我的web.config文件中將會話超時設置爲60分鐘,但仍然以某種方式用戶超時。

我有與此有關的會話超時優先級相關的另一個問題。 IIS會話超時優先於ASP.NET會話超時。說如果IIS會話超時設置爲20分鐘,並且ASP.NET會話超時爲60分鐘,則ASP.NET是否覆蓋IIS會話超時。

回答

3

IIS優先,但他們處理稍有不同的情況。

對於IIS,應用程序池的默認20分鐘超時是指傳入請求。如果您的應用程序在20分鐘內沒有收到任何請求,則應用程序池將進入休眠狀態以節省資源。發生這種情況時,應用程序中的所有會話都消失了。

ASP.NET會話超時處理每會話請求。您的網站可能非常繁忙,但如果一個用戶(即會話)在20分鐘內未處於活動狀態,則只會丟棄該會話。

所以是的,要確保會話保持活動60分鐘,您必須更改IIS應用程序池以及web.config的超時設置。

解決此問題的另一種方法是週期性地發送一個小的AJAX「ping」(即帶有隨機ID的頁面請求以防止瀏覽器緩存)回服務器。這樣,只要用戶不關閉瀏覽器,會話將被保留。

+0

嗨pbz可以告訴我如何實現Ajax ping。 – Kannabiran 2010-07-21 23:51:47

+0

最簡單的方法是設置web服務(asmx),然後通過ajax調用它;例如關於如何用jQuery來做到這一點http://www.ajaxlines.com/ajax/stuff/article/jquery_ajax_and_asmx.php 確保你記得爲jquery ajax調用設置緩存爲false。 如果用戶登錄或不登錄,則可以從web服務返回;如果不是,那麼你可以重定向到登錄頁面或警告他們他們不再登錄(類似Gmail的做法)。 爲了讓它多次觸發,你可以使用一個javascript定時器:http://stackoverflow.com/questions/460474/how-to-set-a-timer-in-javascript – pbz 2010-07-31 21:02:51