2009-12-03 55 views
0

我正在開發基於會話的項目。我在想,與銀行類似,我會創建一張支票,併爲用戶提供阻止會話超時的能力。javascript設置間隔會話管理

我正在考慮創建一個setInterval來檢查需要auth的空白頁面。如果計時器接近結束時間,它會發出一個對話建議用戶會話即將結束。 「保持登錄狀態」按鈕將重置計時器,並且還會顯示一個註銷選項。如果設置的時間間隔從檢查器頁面獲得「401」,則當前頁面將刷新到登錄屏幕。

這是否有意義? setInterval會停止瀏覽器嗎?

另一方面:基於用戶交互清除間隔的最簡單方法是什麼?我需要檢查每個按鍵和/或鼠標事件嗎?還是有更廣泛的檢查用戶是否與頁面交互的方式(如焦點檢查或其他)?

坦卡。


所以,我有一些問題,我使用..的會話處理不是很好的框架,因此,似乎有與更新會話timout,而不是有它的問題超時始終立足於自登錄以來的時間,而不是自上次活動以來的時間。無論如何,得到了處理。我現在想知道的問題是,通過檢查會話是否仍然通過setInterval進行驗證,會話將通過檢查進行更新,因此會話永遠不會超時。或者,我錯過了什麼?


我決定用javascript來處理它。在框架配置中將超時設置爲never,並僅以setTimeout處理超時。

function alerter(msg){ 
    //warn user session about to expire; give opportunity to save 
} 
function killSess(){ 
    window.location = '/logout';  
} 
function sessTimer(time){ 
timerID = window.setTimeout('killSess();',time);  
} 
function observe(div){ 
    Event.observe(div, 'click', function(){ 
     clearTimeout(timerID); 
     sessTimer(30000); 
    }); 
    Event.observe('bodyDiv', 'keydown', function(e){ 
     clearTimeout(timerID); 
     sessTimer(30000); 
    }); 
} 

回答

1

這是否有意義? setInterval是否會停止瀏覽器?

這應該很好。只要間隔時間相當長(幾秒到幾分鐘),並且每次迭代都不會增加全局數據結構的大小,我並不認爲它會讓瀏覽器陷入困境。

順便說一句:什麼是最簡單的方法 給clearInterval基於用戶 互動?我需要檢查每個按鍵和/或鼠標事件的 嗎?或者 是否有更廣泛的檢查用戶是否與頁面 (如焦點檢查或其他)交互的方法?

也許將一些事件處理程序添加到頂級頁面元素(如容器div)可能會有幫助。

+0

嘿,謝謝......我想我沒有考慮的是,如果我在某個時間間隔內對某個auth頁面執行get操作,每個get都會重置會話計時器,呃? – stormdrain 2009-12-03 21:00:39

+0

這是正確的。我對setInterval()的使用只是爲了在每次嘗試增加會話超時的系統上實現keep-alive。也許你可以使用setInterval()來調用一個腳本來增加會話中存儲的計數器值,並在計數器值最大值時清除會話?此外,還有一些需要注意的事情:有些瀏覽器會通過setInterval()重複緩存請求的頁面。確保測試並解決此問題。一種方法是將虛擬查詢字符串添加到您請求的頁面的URL中,並且每次增加該查詢字符串中的值。 – jkndrkn 2009-12-03 21:52:40

+0

我決定只將timeout設置爲never會更容易,並且僅通過javascript處理會話死亡。這是一個本地系統,所以不要擔心可能的安全隱患,這似乎更容易。感謝你的幫助。 – stormdrain 2009-12-04 14:34:55

1

它是非常有意義的,並且setInterval不會停滯瀏覽器,只要您確保在註冊時不再註冊它。

您只想在一個特定按鈕(「不,不要輪詢瀏覽器」或「註銷」)的點擊上運行clearInterval,所以我不太清楚您最後一段中的問題。 ..?

除此之外,我只是補充說,在401,你不應該刷新登錄屏幕。只要通知用戶會話似乎已經丟失,以便用戶可以自己決定保存他可能正在使用的任何內容,或者可能再次登錄到新選項卡中。

+0

我想我最後一段的意思是我想重置定時器,但不清除它......這樣,如果用戶與頁面交互,它將從0開始對auth檢查頁面進行輪詢。但是,我沒有考慮到如果我正在腳本中檢查經過身份驗證的頁面,該會話將通過檢查頁面以查看會話是否仍然存在而保持活動狀態。這就像遞歸,但倒退。 – stormdrain 2009-12-03 21:03:22