我正在開發基於會話的項目。我在想,與銀行類似,我會創建一張支票,併爲用戶提供阻止會話超時的能力。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);
});
}
嘿,謝謝......我想我沒有考慮的是,如果我在某個時間間隔內對某個auth頁面執行get操作,每個get都會重置會話計時器,呃? – stormdrain 2009-12-03 21:00:39
這是正確的。我對setInterval()的使用只是爲了在每次嘗試增加會話超時的系統上實現keep-alive。也許你可以使用setInterval()來調用一個腳本來增加會話中存儲的計數器值,並在計數器值最大值時清除會話?此外,還有一些需要注意的事情:有些瀏覽器會通過setInterval()重複緩存請求的頁面。確保測試並解決此問題。一種方法是將虛擬查詢字符串添加到您請求的頁面的URL中,並且每次增加該查詢字符串中的值。 – jkndrkn 2009-12-03 21:52:40
我決定只將timeout設置爲never會更容易,並且僅通過javascript處理會話死亡。這是一個本地系統,所以不要擔心可能的安全隱患,這似乎更容易。感謝你的幫助。 – stormdrain 2009-12-04 14:34:55