您好,登錄后才能下訂單哦!
這篇文章主要講解了“js關閉瀏覽器時退出賬號怎么處理”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“js關閉瀏覽器時退出賬號怎么處理”吧!
眾所周知,為了賬戶安全,用戶未主動點擊注銷系統時,直接關閉瀏覽器或標簽頁強制退出系統的方法:
// 關閉時調用注銷接口 window.onbeforeunload = function() { //執行注銷ajax調用,簡單示例 $.ajax({url:"/logout"}); };
此方式有嚴重問題, 會造成刷新頁面時也被調用注銷, 很多系統必須支持刷新頁面保持會話,如何處理?
沒有辦法的解決方案, 但有效:
// 關閉時調用注銷接口 window.onbeforeunload = function() { //執行注銷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/javascript"> //為了盡快調用清除延時注銷定時器, 使用原始XMLHttpRequest方式進行調用 var xhr = new XMLHttpRequest(); if (xhr) { xhr.open("POST", '/clearlogout', true); xhr.send(); } </script> ......
經過上述處理, 一般正常的網絡情況下, 刷新頁面操作可確保 調用延時注銷 和 清除延時注銷之間的時間間隔很短, 一般來說, 5秒是較為合理的延時值。
使用此機制的使用可根據偏好, 比如希望更安全,還是希望更確保刷新體驗, 來決定延長還是縮短延時調用定時器。
顯然,上述機制必須依賴后端雙層會話機制,因為前提是必須首先支持刷新頁面會話保持, 所以 表層是web框架本身的session, 內層是應用層會話。 表層會話依賴cookie,內層應用會話依賴后臺緩存機制或者數據庫
感謝各位的閱讀,以上就是“js關閉瀏覽器時退出賬號怎么處理”的內容了,經過本文的學習后,相信大家對js關閉瀏覽器時退出賬號怎么處理這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。