簡體   English   中英

處理客戶端的會話超時

[英]Handling Session timeout on Client side

場景是用戶應該在她的會話即將到期時收到通知(例如通過典型的JS警報或重定向等)。 可以做的幾種方法是

  1. 使用JavaScript超時功能解釋在這里
  2. 使用WebSockets使用服務器推送當然需要HTML5支持。

這兩種方法的相對優點/缺點是什么? 除了這些, 還有其他方法可以實現 (一些標准庫等)。 我的后端是Java EE(Struts + Spring)。

通過使用javascript超時函數,您需要確保如果用戶正在進行任何AJAX調用,則應重置您的函數,因為它應被視為用戶活動。

如果使用服務器推送使用websockets,您可能無法針對不是最新瀏覽器的用戶。 您可能必須使用一些信令框架甚至更改后端堆棧。 (我現在可以想到socket.io和SignalR)

這兩種方法都不會優雅地降級。 因此,IMO javascript選項聽起來更好,因為它可以針對更廣泛的受眾,這將需要您解決一些邊緣案例場景。 如果我有一個選擇,我根本不會實現這個功能。 但這種情況很難發生。

更新:這是我能想到的另一種方法。

每次頁面被提供時,我都會發送一個Cookie,可以在客戶端訪問,其中包含會話超時的UTC時間。 在我的代碼中,我將放置一個setInterval,它將讀取該值並將本地時間與UTC進行比較,如果它關閉,將顯示一個彈出窗口,說明超時將在X秒內發生等。

這再次不會優雅地降級並依賴於客戶機的時間。 因此,如果錯誤,此功能將無法可靠地運行。

如何創建一個過濾器,您可以設置一個cookie,其中包含超時之前的秒數?

因此,您始終將該值設置為(session-config-> session-timeout)* 60。

在正面,使用setInterval,您將通過減去當前cookie值的間隔來更新該cookie值,這樣您就不依賴於時間配置。

暫無
暫無

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

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