2012-04-03 193 views
8

這種情況是,當用戶的會話即將過期時,用戶應該收到通知(通過典型的JS警報或重定向等)。這可以做的幾種方法是客戶端處理會話超時

  1. 使用javascript超時函數如解釋here
  2. 使用Server Push使用WebSockets,這當然需要HTML5支持。

這兩種方法的相對優缺點是什麼?除此之外,是否還有其他方法可以實現(某些標準庫等)。我的後端是Java EE(Struts + Spring)。

回答

6

通過使用JavaScript超時功能,您需要確保如果用戶正在進行任何AJAX調用,您的功能應該被重置,因爲它應該被視爲用戶活動。

如果使用服務器推送使用websockets,您可能無法使用不是最新的瀏覽器的用戶。你可能不得不使用一些信令框架,甚至改變你的後端堆棧。 (我可以想到socket.io & SignalR截至目前)

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

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

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

這也不會降級優雅地依靠客戶機的時間。所以,如果這是錯誤的,這個功能將無法可靠地工作。

1

如何創建一個過濾器,在其中設置一個cookie,剩餘的秒數超時?

所以,你總是會設定值(會話config->會話超時)* 60

在正面,使用的setInterval,你會減去間隔的更新cookie值當前的cookie值,這種方式不依賴於時間配置。

+0

這是否安全?客戶端會話超時可以通過插入js代碼輕鬆繞過,比如通過插件刷新計數器(註銷時間爲1) – 2017-01-17 05:38:26