我們的應用程序在30分鐘後註銷並重定向到登錄頁面,我在web.xml中指定會話超時並使用requestProcessor進行重定向。我想向用戶顯示一條消息,一旦會話過期,你的會話過期了,我該怎麼做。自動註銷? 我想在頁面上提示錯誤信息「會話超時,請重新登錄」。那我怎麼能檢測到會話超時?任何方法會自動觸發嗎?會話過期後自動註銷
回答
創建一個活動檢查器,該活動檢查器每分鐘檢查是否發生任何用戶活動(mouseclick,keypress),並向服務器端執行檢測信號,以便在用戶處於活動狀態時保持會話活動狀態,而當用戶不活動時不執行任何操作活性。當30分鐘內沒有活動(或者在服務器端設置了默認的會話超時時間)時,請執行重定向。
下面是一個啓動示例,幾乎沒有jQuery的幫助來綁定點擊和按鍵事件並激發ajax請求。
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
$(document).ready(function() {
$.active = false;
$('body').bind('click keypress', function() { $.active = true; });
checkActivity(1800000, 60000, 0); // timeout = 30 minutes, interval = 1 minute.
});
function checkActivity(timeout, interval, elapsed) {
if ($.active) {
elapsed = 0;
$.active = false;
$.get('heartbeat');
}
if (elapsed < timeout) {
elapsed += interval;
setTimeout(function() {
checkActivity(timeout, interval, elapsed);
}, interval);
} else {
window.location = 'http://example.com/expired'; // Redirect to "session expired" page.
}
}
</script>
創建Servlet
它偵聽/heartbeat
和做基本上只是執行以下操作:
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
request.getSession();
}
保持會話活着。
當您將登錄用戶存儲在會話中時,只要會話過期,它將「自動」註銷。所以你不需要手動註銷用戶。
如果您使用的是servlet會話,則可以使用isNew()方法檢查jsp/servlet正在返回的會話是否是新會話。如果是,則用戶的會話已過期,您可以顯示相關消息。
用戶會話過期消息必須在超時後顯示,在您的情況下,它將顯示即使註銷後,我不需要 – sarah 2010-07-08 09:09:23
創建監聽類實現HttpSessionListener
,並在web.xml
定義它時,任何會話被銷燬這會通知您。使用sessionDestroyed()
方法。
見一個完整的例子在這裏:
http://www.mkyong.com/servlet/a-simple-httpsessionlistener-example-active-sessions-counter/
上述解決方案不會強制瀏覽器顯示對話框。 – 2010-07-08 09:57:44
上述解決方案將強制應用程序提示即使註銷後的消息,它也不會檢查到期時間,比如說30分鐘,並顯示消息 – sarah 2010-07-08 11:28:02
包括你的JSP中一個JavaScript實用功能和ping服務器每31分鐘。 上面提到的實用函數應該在內部使用setTimeout()JS函數。
setTimeout ("checkServerSession()", /* intervalInMilliSeconds */ 31000);
注意
checkServerSession()
是一個普通的JS功能,可能會觸發HTTP請求。如果請求成功,則會話存在,否則向用戶顯示提示。
讓我知道一個例子,該如何起作用 – sarah 2010-07-08 11:29:26
- 1. 會話過期後自動註銷
- 2. 註銷後會話不會過期
- 3. 會話Cookie,自動註銷
- 4. AJAX註銷,如果會話已過期
- 5. 當會話過期時,網站如何自動將用戶自動註銷?
- 6. 註銷後清除會話
- 7. 註銷後破壞會話
- 8. Cakephp在註銷後不會過期
- 9. Membershipprovider:會話結束時自動註銷
- 10. 自動註銷其他登錄會話
- 11. 會話過期後自動重定向
- 12. Ruby on Rails - Omniauth facebook - 註銷後過期會話
- 13. Spring Security 3.1:註銷後捕獲會話過期
- 14. 我的會話在註冊表查詢後自動銷燬
- 15. 在WPF中自動註銷後恢復上一個會話
- 16. C#help !!會話自動註銷後重新登錄
- 17. 用戶類型(Yii 1.x)x秒後自動註銷會話
- 18. 變量已過期Asp.net會員供應商自動註銷
- 19. asp.net會話註銷
- 20. 註銷citrix會話
- 21. Facebook註銷會話
- 22. 彈簧 - 防止銷燬自動註銷會話
- 23. Asp.net會員註銷自動
- 24. 會話僅在註銷時到期
- 25. 在會話到期時註銷用戶
- 26. 會話自動銷燬笨
- 27. Sinatra會話自動銷燬
- 28. 當會話過期時,會話管理器不會將我註銷,HTTPContext.Current爲空
- 29. 自動註銷後在Django
- 30. 流失註銷舊會話註銷
我希望顯示警報消息30分鐘後,如何更改上述腳本,我已在web.xml中定義會話超時 – sarah 2010-07-09 09:21:25
即使應用程序正在使用,此腳本也會彈出。 – sarah 2010-07-10 05:07:37
當您在同一個會話中打開多個窗口時,確實會發生這種情況。這是一個基本的開球的例子。你需要更進一步。只要用戶處於活動狀態,向服務器端發送ajaxical輪詢以保持會話活動。你可以在[我的其他答案]中找到一個例子(http://stackoverflow.com/questions/2319020/mvc-with-jquery-handling-session-expire/2319211#2319211)。 – BalusC 2010-07-10 05:16:16