浏览器关闭时发送请求使token过期的方法,不受刷新和关闭标签页影响?-灵析社区

CO_co

监听浏览器关闭时需要【发送请求给后端】清除token,不受刷新和关闭标签页影响,有人搞过吗? 给了其它方案给设计师,但他们安全那边就是要关闭浏览器时就得发送请求给后端使token过期

阅读量:180

点赞量:0

问AI
做过这个功能,但只适合主流浏览器,代码如下: let beforeUnloadTime = null; window.addEventListener("beforeunload", e => beforeunloadHandler(e)); window.addEventListener("unload", e => unloadHandler(e)) function beforeunloadHandler () { beforeUnloadTime = new Date().getTime(); } function unloadHandler(e) { let unloadTime = new Date().getTime() - beforeUnloadTime; // 判断是窗口关闭还是刷新 if (unloadTime <= 5) { await fetch(``, { method: "POST", headers: { "Content-Type": "application/json", "Edc-Authorization": "Bearer " + localStorage.getItem("Token") }, // 保持连接 keepalive: true }); } } 如果想更好的解决这个问题,建议使用socket做心跳连接,一直ping,如何断开连接,表示浏览器关闭了,这时候后端处理这个逻辑。 问题:有没有可能同一个浏览器打开了多个页面,我只关闭了其中一个页面,但是我切换了另外一个页面时,并不想退出登录,那么我们应该在这个浏览器关闭这个域名的最后一个网页时处理这个逻辑。 所以我们应该记住当前浏览器打开几个页面: window.onload = function() { const count = localStorage.getItem("BrowserWindowNumber"); if (count === null) { localStorage.setItem("BrowserWindowNumber", 1); } else if (~~count === -1) { localStorage.setItem("BrowserWindowNumber", 1); } else { localStorage.setItem("BrowserWindowNumber", parseInt(count) + 1); } }; // 当窗口关闭时,减少计数器 window.onunload = function() { const count = localStorage.getItem("BrowserWindowNumber"); if (count !== null) { localStorage.setItem("BrowserWindowNumber", parseInt(count) - 1); } }; function beforeunloadHandler () { beforeUnloadTime = new Date().getTime(); } function unloadHandler(e) { let unloadTime = new Date().getTime() - beforeUnloadTime; // 判断是窗口关闭还是刷新 if (unloadTime <= 5) { const count = localStorage.getItem("BrowserWindowNumber"); if(~~count === 0) { await fetch(``, { method: "POST", headers: { "Content-Type": "application/json", "Edc-Authorization": "Bearer " + localStorage.getItem("Token") }, // 保持连接 keepalive: true }); } } }