2012-03-02 69 views

回答

5

如果會話已過期,您需要檢查客戶端。最簡單的方法是在頁面加載完成後使用JavaScript簡單地開始倒計時(只要超時)。當它到期時,將用戶發送到登錄頁面。或者,也許更好:讓用戶知道會話已過期,因爲如果你只是把他送到某個地方,他可能不會太高興。雖然我的網上銀行軟件確實如此,但出於安全原因,當然。

這裏是一個非常簡單的例子:http://jsfiddle.net/39Sj6/1/

function sessionHasExpired(){ 
    if(confirm("Your session has expired. Do you want to go to the login page")){ 
     window.location = "http://google.com/?q=login"; 
    } 
} 

var sessionTimeInMilliseconds = 1000*60*5; // here: 5 minutes 
setTimeout(sessionHasExpired, sessionTimeInMilliseconds); 

(在的jsfiddle,你將不會被重定向到Google,因爲這是由的jsfiddle禁止的,但原則上這是可行的)

+0

謝謝安德烈。這是一個Intranet應用程序,在某些頁面上顯示了一些準確的數據,所以如果在超時時他們會自動註銷,他們不介意。你能提供一些關於如何實現這個目標的示例代碼嗎?如果我正在使用母版頁,倒計時腳本應該在母版頁上嗎? – NoBullMan 2012-03-02 18:09:11

+0

我不小心將示例添加到Mark的答案中,而不是我的。我也將這個例子加入了這個答案。如果您不想問用戶是否離開頁面,請不要使用confirm()構造,而只需設置window.location。如果每個頁面都包含腳本,那麼腳本可以添加到母版頁中,是的。不是說如果你正在做Ajax調用,你應該在每個Ajax調用之後重置超時。 – 2012-03-02 18:28:48

+0

再次感謝安德烈。幾件事情:當我點擊確定並進入登錄頁面時,我可以點擊瀏覽器的後退按鈕,轉到我所在的位置,繼續做我正在做的事情。超時已發生,但我的會話仍然存在。另外,如果我將腳本放在主頁面上,當我從一個頁面跳轉到另一個頁面時,計時器是否從0開始計算,還是從它的剩餘位置開始計算? – NoBullMan 2012-03-02 19:00:00

0

是的,你可以通過Javascript計時器輪詢會話狀態和ajax調用來檢查服務器會話狀態,然後重定向到登錄頁面,或者,你可以設置一個計時器到指定的時間限制(20分鐘或會話超時)然後重定向到登錄頁面。

+1

如果您輪詢服務器,會話將刷新。這就像打開冰箱門看看燈是否熄滅。 – 2012-03-02 16:23:22

+0

我沒有意識到一個GET會刷新會話,那不會工作。雖然可能是超時的一個很好的選擇,有點像會話除顫器。 :) – 2012-03-02 16:37:11

+2

絕對 - 「你不死我的,該死的會議!」 :-) – 2012-03-02 16:39:24

相關問題