javascript - javascript 上的 localStorage 带来刷新

标签 javascript local-storage logout idle-timer

我试图在空闲时关闭用户,在选项卡之间使用 javascript,下面的代码对于单个选项卡工作正常,对于多个选项卡它无法正常工作

例如:我设置了 10 秒作为空闲时间,并将第一个选项卡保留在 10 秒内,假设我在 00:00:05 小时打开第一个选项卡并打开第二个选项卡在 00:00:10 小时,并在第二个选项卡上工作 00:00:13 小时,并离开了项目必须在 00 注销的两个选项卡:00:23 对吗?但它在 00:00:15 上注销,我不知道这里发生了什么,如果它没有正确刷新,当我使用它时,它怎么可能长时间停留在第二个选项卡上?如果刷新正确,它如何根据第一个打开的选项卡将我注销,代码如下。

<script>
var IDLE_TIMEOUT = 10; //seconds
localStorage.setItem("setTimeOut", "0");

document.onclick = function () {    
    localStorage.setItem("setTimeOut", "0");
};

document.onmousemove = function () {   
    localStorage.setItem("setTimeOut", "0");
};

document.onkeypress = function () {  
    localStorage.setItem("setTimeOut", "0");
};

document.onfocus = function () {  
    localStorage.setItem("setTimeOut", "0");
};


window.setInterval(CheckIdleTime, 1000);
function CheckIdleTime() {  
    localStorage.setItem("setTimeOut", parseInt(localStorage.getItem("setTimeOut"))+1);
    if (localStorage.getItem("setTimeOut") >= IDLE_TIMEOUT) {
        alert('Times up!, You are idle for about 15 minutes, Please login to continue');
        document.location.href = "logout.php";
    }
}
</script>

最佳答案

不要在每个选项卡上每秒增加该值,这意味着每秒都会随着打开的选项卡数量而不是 1 秒而增加,只需设置交互的当前时间,然后每秒与该时间进行比较。

因此,在您的事件处理程序中,请执行以下操作:

localStorage.setItem("lastInteraction", Date.now())

...然后在您的 CheckIdleTime() 函数中,删除 localStorage.setItem() 并将您的 if 条件更改为此:

Number(localStorage.getItem("lastInteraction")) + (IDLE_TIMEOUT * 1000) < Date.now()

该条件获取最后一次交互发生的时间,添加超时常量,然后检查当前时间(现在)是否超过该值。

关于javascript - javascript 上的 localStorage 带来刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45012558/

相关文章:

javascript - 如何将命名函数与 for each 和 this 一起使用

java - 在netty中使用TextWebsocketFrame在不同的TextAreas中写入不同的消息

javascript - 通过悬停在两个元素之间绘制一条线

macos - 在 macOS 10.11+ 中为 WebView 持久化 localStorage

javascript - UWP:如何访问应用程序数据

android - Android 应用程序中的 Google 登录 "check first time login"和 "Logout"问题

使用 .push .text 将 javascript 数组清空

local-storage - iBooks 是否支持 ePUB 格式的 localStorage?

tomcat - 如何在网页中实现注销按钮?

tomcat - 停用 tomcat session