[英]SPA: how to know if user's alive
我有: SPA應用程序,這意味着它甚至可以進行脫機處理。 這意味着我的應用僅在需要一些其他信息或要保存某些內容時才詢問服務器。
我使用過期策略將用戶連接保存在Guava Cache
。 這意味着我不必擔心超時后會話的破壞。
關鍵點:每次用戶執行某些請求時,我都會重置超時以避免會話破壞。 當用戶在指定的時間內處於非活動狀態時,Guava Cache只會丟棄其會話。
問題:問題與SPA有關。 使用SPA,如果用戶不發送任何請求,並不表示他處於非活動狀態。
我想要:超時后自動關閉用戶會話並注銷他。
問題:如何知道用戶是否在SPA中處於活動狀態?
首先想到的是-在服務器端使用過期緩存之類的東西,並從客戶端發送每個例如5分鍾的keep_alive請求,以指示該客戶端處於活動狀態。 但這似乎工程過度。 另外,我們用數百個不必要的請求阻塞了服務器。
因此,我發現了(決不是開拓者)更好的解決方案:客戶端自己計算一個非活動時間段,如果inactive_period大於超時時間,則發送適當的請求。
activityListener = {
timeout: null,
activityHandler: function () {
$.cookie('last_activity', new Date().getTime());
},
initialize: function (timeout) {
this.timeout = timeout;
$.cookie('last_activity', new Date().getTime());
if ($.cookie('do_activity_check') != true) {
$.cookie('do_activity_check', true);
setInterval(this.activityCheck, timeout / 2);
}
addEventListener('click', this.activityHandler, false);
addEventListener('scroll', this.activityHandler, false);
},
handleTimeout: function () {
if (oLoginPage.authorities != null) {
le.send({
"@class": "UserRequest$Logout",
"id": "UserRequest.Logout"
});
}
},
activityCheck: function () {
var after_last_activity_ms = new Date().getTime() - $.cookie('last_activity');
if (after_last_activity_ms > activityListener.timeout) activityListener.handleTimeout();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.