1. 程式人生 > 程式設計 >js關閉瀏覽器時退出賬號的處理

js關閉瀏覽器時退出賬號的處理

目錄
  • 經典做法
  • 問題
  • 進一步問題
  • 需要注意問題

經典做法

眾所周知,為了賬戶安全,使用者未主動點選登出系統時,直接關閉瀏覽器或標籤頁強制退出系統的方法:

// 關閉時呼叫登出介面
window.onbeforeunload = function() {
 //執行登出ajax呼叫,簡單示例
 $.ajax({url:"/logout"});
};

問題

此方式有嚴重問題, 會造成重新整理頁面時也被呼叫登出, 很多系統必須支援重新整理頁面保持會話,如何處理?

沒有辦法的解決方案, 但有效:

// 關閉時呼叫登出介面
window.onbeforeunload = funcwww.cppcns.comtion() {
 //執行登出ajax呼叫,傳入標誌,告訴後臺延時登出
 $.ajax({url:"/logout"},data:{delay:
true}); };

後臺登出介面根據delay標誌, 設定定時器,進行延時登出, 比如設定5秒定時器,5秒後,才真正登出應用系統會話。

同時,前端頁面載入後,要立刻呼叫一個清除登出的介面, 告訴後臺刪除延時登出定時器,確保重新整理頁面時放棄之前的登出操作,以保持應用會話。

進一步問題

後臺定時器設定多少延時可靠? 當然希望越短越好, 因為可以確保使用者關閉瀏覽器後, 重新開啟頁面,不至於重新保持會話, 例如後臺設定5秒定時器, 使用者關閉瀏覽器, 重新開啟頁面之間間隔只要大於5秒, 則會話將不會恢復, 確保重新進入登陸頁面。 當然,如果使用者手速過高,5秒內重新開啟頁面,則會成功進入上一個會話, 當然這不會造成嚴重問題, 因為惡意使用者不可能非常快的使用使用者離開的電腦並開啟頁面。

然後呢? 到底設定多少秒延時為好? 這取決於 前端程式碼載入頁面時呼叫清除延時登出定時器的時機, 關鍵點是,越早越好。
如何越早呢? 當然是 需要把此呼叫放在主頁的儘可能提前的程式碼中,比如:

<html manifest="">
 <head>
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta charset="UTF-8">
  <meta http-equiv客棧="Pragma" content="no-cache">
  <meta http-equiv="Cache-Control" content="no-cache">
  <meta http-equiv="Expires" content="0">
  
  <script type="text/">
   //為了儘快呼叫清除延時登出定時器, 使用原始XMLHttpRequest方式進行呼叫
   var xhr = new XMLHttpRequest();
   if (xhr) {
    xhr.open("POST",'/clearlogout',true);
    xhr.send();
  www.cppcns.com
} </script> ......

經過上述處理, 一般正常的網路情況下, 重新整理頁面操作可確保 呼叫延時登出 和 清除延時登出之間的時間間隔很短, 一般來說, 5秒是較為合理的延時值。
使用此機制的使用可根據偏好, 比如希望更安全,還是希望更確保重新整理體驗, 來決定延長還是縮短延時呼叫定時器。

需要注意問題

顯然,上述機制必須依賴後端雙層會話機制,因為前提是必須首先支援重新整理頁面會話保持, 所以 表層是web框架本身的session,內層是應用層會話。 表層會話依賴cookie,內層應用會話依賴後臺快取機制或者

到此這篇關於關閉瀏覽器時退出賬號的處理的文章就介紹到這了,更多相關js關閉瀏覽器時退出賬號內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!