需求是登录之后会有一个token过期时间,到了时间立刻弹框重定向到登录页,不能等到请求接口返回403再弹框,这个应该怎么实现呢?
setinterval 被说会有性能问题,真的会很占用资源吗
需求是登录之后会有一个token过期时间,到了时间立刻弹框重定向到登录页,不能等到请求接口返回403再弹框,这个应该怎么实现呢?
setinterval 被说会有性能问题,真的会很占用资源吗
不管是setTimeout还是setInterval,都无法精准做到你说的效果,
很容易出现,距离失效还有1ms,发起请求了,接口请求返回403了.
建议你在每次发起请求前,检查token失效时间,快到时间了(比如,5s,10s之类的),就弹窗重新定向到登录页.
function checkTokenExp() {
// 假设你已经从服务器获取了 token 的过期时间,并存储在变量 tokenExpDate 中
var currentTime = new Date();
if (currentTime >= tokenExpDate {
if (confirm("你的登录已经过期,是否重新登录?")) {
// 使用 replace 不会留下历史记录
window.location.replace("/login");
}
}
}
// 每隔 5 分钟检查一次 token 的过期时间
setInterval(checkTokenExp, 5 60 1000);
这种方式是轮询检测设置长点不存在性能问题,还可以点击按钮提示并跳转(看你们公司的业务),时间也可以存到sessionStorage里面
先别管后台该怎么做,先把自己的活儿干好就行。
10 回答7.4k 阅读
16 回答2.8k 阅读✓ 已解决
6 回答4.1k 阅读✓ 已解决
9 回答3.4k 阅读✓ 已解决
14 回答5.4k 阅读
11 回答2.6k 阅读✓ 已解决
9 回答3.2k 阅读
setTimeout
和setInterval
都没有那么准。另外如果网页被切入后台,这两个计时器都会被停掉,直到被唤醒。setInterval
不会有什么性能问题,除非你代码有问题。注意全局统一管理,不要反复注册多次就行了。