簡體   English   中英

有一個不更新用戶Java會話的servlet

[英]Have one servlet that does not renew the user's java session

我有一個servlet(GWT-RPC servlet),僅用於檢查用戶會話是否已清除(通過查看並查看會話變量是否為null)。

問題是,當它在用戶瀏覽器中的計時器上運行時,每個檢查會話是否已清除的請求都會將會話更新續約30分鍾。 我可以嘗試使計時器請求的頻率小於會話超時的頻率。 例如,如果會話每30分鍾過期一次,而我每隔35分鍾檢查一次,則最終最多需要70分鍾才能最終正確檢測到會話已終止。

有人知道讓servlet請求不更新會話的方法嗎?

Servlet規范要求訪問會話的任何請求都會更新會話的上次訪問時間,從而延長會話的壽命。 “正確”的解決方案取決於您究竟需要知道會話是否過期的確切原因。 我懷疑您真正想要的是javax.servlet.http.HttpSessionListener

這是我目前的解決方案...

創建一個Servlet過濾器,該過濾器更新名為“ CUSTOM_LAST_SESSION_ACCESS”的會話變量。 對Web應用程序的任何請求都會將此變量更新為當前時間戳。

通過ajax進行Javascript計時器檢查,如果該變量在最近30分鍾內已更新,則該會話不會無效。

這意味着如果您從不關閉瀏覽器,則通過javascript調用使會話無效。 如果關閉瀏覽器,則會執行標准的Java會話清理,因為在30分鍾內沒有HTTP請求發生。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM