2012-01-04 50 views
2

我想檢查會話過期與否。 所以我決定創建一個名爲IsServerExpired的動作,讓它返回一個包含布爾值的json對象和重定向url。處理會話在MVC 2中過期與AJAX

因此Java腳本函數會做一個Ajax請求以指定的時間間隔這個操作。 我有一些基本的問題..

1.如果我發送一個Ajax請求,我認爲,這將刷新會話時間。所以實際上,如果我使用這種方法,會話將不會過期。我對嗎 ?

如果刷新我怎麼能檢查會話過期使用輪詢

回答

3

一旦會話過期,還有更簡單的方法可以註銷用戶。

您可以保存在某個地方SessionTimeout在客戶端和運行客戶端計時器,計時器一旦達到最終用戶重定向到註銷URL。

這裏是一個例子。 Model here containts SessionTimeout value。

$(document).ready(function() { 
    var timeOutInMinutes = @Model; 
    if(timeOutInMinutes > 0) 
    { 
    setTimeout(function() { 
     window.location = 
       '@Url.Action("Logout", "Authentication", new {area=""})'; 
    },timeOutInMinutes * 1000 * 60); 
    } 
}); 

更多用戶友好的方式是顯示彈出窗口,會說,會議將wihtin一分鐘內結束(如果會話超時15分鐘,再經過14分鐘表現出來),這樣用戶就可以刷新頁面。並繼續工作。

+0

如果我在頁面加載後做了ajax調用,這個方法就不會考慮這個。不是嗎?這是我的情況的一個缺點。 – Lijo 2013-10-14 12:15:24

+0

是的,根據web.config中的會話超時值,此方法僅在客戶端等待。 – 2013-10-18 05:40:11

1

我認爲你是一個ASP.NET會話和身份驗證cookie之間撲朔迷離。我懷疑你在這裏談論身份驗證cookie到期。如果您在web.config中將slidingExpiration設置爲true,則輪詢AJAX請求將更新超時,以使其不適用。 Phil Haack描述了一種在this blog post的AJAX調用中檢測驗證cookie過期的非常優雅的方法。