当前位置: 首页 > 知识库问答 >
问题:

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

东方涛
2024-03-22

监听浏览器关闭时需要【发送请求给后端】清除token,不受刷新和关闭标签页影响,有人搞过吗?

给了其它方案给设计师,但他们安全那边就是要关闭浏览器时就得发送请求给后端使token过期

共有2个答案

包永新
2024-03-22

Beacon API 用于发送异步和非阻塞的信标请求。信标请求不需要响应,且浏览器保证在页面卸载前初始化并运行完成。

或者每隔一段时间(如一分钟)发送一次请求,当后端超过一端时间没有收到请求时就认为 token 过期。

吴单鹗
2024-03-22

要在浏览器关闭时发送请求使token过期,并且不受刷新和关闭标签页的影响,你可以使用beforeunload事件。这个事件会在窗口、文档及其资源将要卸载时触发。你可以在这个事件的处理函数中发送一个请求到后端来使token过期。

下面是一个简单的示例代码,演示了如何使用beforeunload事件来发送请求使token过期:

window.addEventListener('beforeunload', function (e) {  // 在这里发送请求到后端使token过期  // 你可以使用fetch、axios或其他你喜欢的HTTP库来发送请求  fetch('/api/token/expire', {    method: 'POST',    headers: {      'Content-Type': 'application/json',    },    body: JSON.stringify({ token: 'your_token_here' }), // 将要过期的token作为请求体发送  })    .then(response => {      // 处理响应,如果需要的话    })    .catch(error => {      // 处理错误,如果需要的话    });  // Chrome要求返回一个非空字符串,否则不会触发事件  e.preventDefault();  e.returnValue = '';});

请注意,由于浏览器安全策略的限制,beforeunload事件的处理函数在大多数浏览器中是异步执行的,这意味着你不能在这个函数中等待异步操作(如HTTP请求)完成。因此,你可能需要采取其他策略来确保token在浏览器关闭之前被成功过期,例如使用WebSockets或其他长连接技术。

此外,还需要注意的是,即使你成功地在浏览器关闭时发送了使token过期的请求,仍然有可能存在一些边缘情况,例如用户直接关闭计算机或杀死浏览器进程,导致请求无法成功发送。因此,后端应该有一个机制来处理这种情况,例如设置一个token的过期时间,并在验证token时检查它是否已经过期。

 类似资料:
  • 问题内容: 是否有跨浏览器的JavaScript / jQuery代码来检测浏览器或浏览器选项卡是否已关闭,但不是由于单击链接而导致的? 问题答案: 如果我正确地理解了您,您想知道标签/窗口何时有效关闭。好吧,AFAIK 检测事件的唯一方法是&事件。 不幸的是(或幸运的是?),当您通过或浏览器的后退按钮离开网站时,也会触发这些事件。因此,这是我能给出的最佳答案,我认为您无法从本机检测Java 脚本

  • 问题内容: 我想在Angularjs控制器中触发JS代码。 我有这个: 当我离开使用该控制器的页面时,此方法工作正常,但当我关闭标签/浏览器时,该方法不起作用。 标签/浏览器关闭时是否需要使用其他代码来触发JS代码? 问题答案: 从角度文档: $ destroy(); 从父范围中删除当前范围(及其所有子级)。删除意味着对$ digest()的调用将不再传播到当前作用域及其子级。删除还意味着当前范围

  • 问题内容: 我试图找出用户何时离开指定页面。找出他何时使用页面内的链接进行导航是没有问题的,但是我有点需要标记一些东西,例如当他关闭窗口或键入另一个URL并按Enter时。第二个不是那么重要,但第一个是重要。所以这是一个问题: 我如何查看用户何时关闭我的页面(捕获window.close事件),然后……并没有什么关系(我需要发送AJAX请求,但是如果可以获取它以运行警报,我可以剩下的)。 问题答案

  • 浏览器上用js怎么区分 关闭标签页还是关闭整个浏览器? 现在是想在关闭整个浏览器的时候清空登录信息,关闭标签页的时候不清空?(使用windows,chrome)

  • 问题内容: 如何在用户离开Gmail之前向用户要求确认? 我在各个地方搜索了这个问题,但他们提到的只是使用javascript window.unload 和 window.onbeforeunload 。而且,由于它被阻塞,大多数情况下在chrome中都不起作用。 问题答案: 尝试这个:

  • 本文向大家介绍python selenium 对浏览器标签页进行关闭和切换的方法,包括了python selenium 对浏览器标签页进行关闭和切换的方法的使用技巧和注意事项,需要的朋友参考一下 1.关闭浏览器全部标签页 2.关闭当前标签页(从标签页A打开新的标签页B,关闭标签页A) 3.关闭当前标签页(从标签页A打开新的标签页B,关闭标签页B) 可利用浏览器自带的快捷方式对打开的标签进行关闭 F