js關(guān)閉瀏覽器時(shí)退出賬號(hào)的處理
經(jīng)典做法
眾所周知,為了賬戶安全,用戶未主動(dòng)點(diǎn)擊注銷系統(tǒng)時(shí),直接關(guān)閉瀏覽器或標(biāo)簽頁強(qiáng)制退出系統(tǒng)的方法:
// 關(guān)閉時(shí)調(diào)用注銷接口 window.onbeforeunload = function() { //執(zhí)行注銷ajax調(diào)用,簡單示例 $.ajax({url:"/logout"}); };
問題
此方式有嚴(yán)重問題, 會(huì)造成刷新頁面時(shí)也被調(diào)用注銷, 很多系統(tǒng)必須支持刷新頁面保持會(huì)話,如何處理?
沒有辦法的解決方案, 但有效:
// 關(guān)閉時(shí)調(diào)用注銷接口 window.onbeforeunload = function() { //執(zhí)行注銷ajax調(diào)用, 傳入標(biāo)志, 告訴后臺(tái)延時(shí)注銷 $.ajax({url:"/logout"},data:{delay:true}); };
后臺(tái)注銷接口根據(jù)delay標(biāo)志, 設(shè)置定時(shí)器,進(jìn)行延時(shí)注銷, 比如設(shè)置5秒定時(shí)器,5秒后,才真正注銷應(yīng)用系統(tǒng)會(huì)話。
同時(shí),前端頁面加載后,要立刻調(diào)用一個(gè)清除注銷的接口, 告訴后臺(tái)刪除延時(shí)注銷定時(shí)器,確保刷新頁面時(shí)放棄之前的注銷操作,以保持應(yīng)用會(huì)話。
進(jìn)一步問題
后臺(tái)定時(shí)器設(shè)置多少延時(shí)可靠? 當(dāng)然希望越短越好, 因?yàn)榭梢源_保用戶關(guān)閉瀏覽器后, 重新打開頁面,不至于重新保持會(huì)話, 例如后臺(tái)設(shè)置5秒定時(shí)器, 用戶關(guān)閉瀏覽器, 重新打開頁面之間間隔只要大于5秒, 則會(huì)話將不會(huì)恢復(fù), 確保重新進(jìn)入登陸頁面。 當(dāng)然,如果用戶手速過高,5秒內(nèi)重新打開頁面,則會(huì)成功進(jìn)入上一個(gè)會(huì)話, 當(dāng)然這不會(huì)造成嚴(yán)重問題, 因?yàn)閻阂庥脩舨豢赡芊浅?斓氖褂糜脩綦x開的電腦并打開頁面。
然后呢? 到底設(shè)置多少秒延時(shí)為好? 這取決于 前端代碼加載頁面時(shí)調(diào)用清除延時(shí)注銷定時(shí)器的時(shí)機(jī), 關(guān)鍵點(diǎn)是,越早越好。
如何越早呢? 當(dāng)然是 需要把此調(diào)用放在主頁的盡可能提前的代碼中,比如:
<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"> //為了盡快調(diào)用清除延時(shí)注銷定時(shí)器, 使用原始XMLHttpRequest方式進(jìn)行調(diào)用 var xhr = new XMLHttpRequest(); if (xhr) { xhr.open("POST", '/clearlogout', true); xhr.send(); } </script> ......
經(jīng)過上述處理, 一般正常的網(wǎng)絡(luò)情況下, 刷新頁面操作可確保 調(diào)用延時(shí)注銷 和 清除延時(shí)注銷之間的時(shí)間間隔很短, 一般來說, 5秒是較為合理的延時(shí)值。
使用此機(jī)制的使用可根據(jù)偏好, 比如希望更安全,還是希望更確保刷新體驗(yàn), 來決定延長還是縮短延時(shí)調(diào)用定時(shí)器。
需要注意問題
顯然,上述機(jī)制必須依賴后端雙層會(huì)話機(jī)制,因?yàn)榍疤崾潜仨毷紫戎С炙⑿马撁鏁?huì)話保持, 所以 表層是web框架本身的session, 內(nèi)層是應(yīng)用層會(huì)話。 表層會(huì)話依賴cookie,內(nèi)層應(yīng)用會(huì)話依賴后臺(tái)緩存機(jī)制或者數(shù)據(jù)庫
到此這篇關(guān)于js關(guān)閉瀏覽器時(shí)退出賬號(hào)的處理的文章就介紹到這了,更多相關(guān)js關(guān)閉瀏覽器時(shí)退出賬號(hào)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
非常不錯(cuò)的功能強(qiáng)大代碼簡單的管理菜單美化版
由于網(wǎng)盤不穩(wěn)定,很多時(shí)候文件提示找不到,幸好U盤里存了. 喜歡這3個(gè)風(fēng)格的朋友們別在PM我啦.....我把文件傳到我服務(wù)器上了..2008-07-07javascript使用eval或者new Function進(jìn)行語法檢查
使用代碼來實(shí)現(xiàn)分析代碼的語法,這是一件極其痛苦的事情。簡單的解決辦法是:使用腳本引擎自己的語法檢查,比方說eval( ) 或者new Function( )。2010-10-10layui+ssm實(shí)現(xiàn)數(shù)據(jù)批量刪除功能
本篇文章給大家介紹layui+ssm實(shí)現(xiàn)數(shù)據(jù)批量刪除功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-12-12Ajax局部更新導(dǎo)致JS事件重復(fù)觸發(fā)問題的解決方法
如果頁面中包含一個(gè)ajax更新的列表,那么需要小心非動(dòng)態(tài)更新部分的事件處理,下面以帶有公共工具欄的列表界面為例2014-10-10H5基于iScroll實(shí)現(xiàn)下拉刷新和上拉加載更多
這篇文章主要為大家詳細(xì)介紹了H5基于iScroll實(shí)現(xiàn)下拉刷新和上拉加載更多效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07詳細(xì)分析jsonp的原理和實(shí)現(xiàn)方式
給大家圖文詳細(xì)分析一下jsonp的原理以及跨域問題的匯總。2017-11-11小程序點(diǎn)餐界面添加購物車左右擺動(dòng)動(dòng)畫
這篇文章主要介紹了小程序點(diǎn)餐界面添加購物車左右擺動(dòng)動(dòng)畫,當(dāng)用戶點(diǎn)擊添加到購物車后會(huì)有一個(gè)左右擺動(dòng)的購物車提示效果,代碼簡單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-09-09JS+Ajax+Jquery實(shí)現(xiàn)頁面無刷新分頁以及分組 超強(qiáng)的實(shí)現(xiàn)
JS+Ajax+Jquery實(shí)現(xiàn)頁面無刷新分頁以及分組 超強(qiáng)的實(shí)現(xiàn) 加上你的CSS完全可以與EXT媲美哦2009-08-08webpack 3.X學(xué)習(xí)之多頁面打包的方法
這篇文章主要介紹了webpack 3.X學(xué)習(xí)之多頁面打包的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09Javascript前端下載后臺(tái)傳來的文件流代碼實(shí)例
這篇文章主要介紹了Javascript前端下載后臺(tái)傳來的文件流代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08