javascript上的本地存储导致刷新

javascript上的本地存储导致刷新,javascript,local-storage,logout,idle-timer,Javascript,Local Storage,Logout,Idle Timer,我试图在空闲时激发用户,使用跨选项卡的javascript,下面的代码可以很好地用于单个选项卡,用于多个选项卡,但工作不正常 例如:我将10秒设置为空闲时间,并将第一个选项卡保留在10秒后抛出用户,假设我在00:00:05小时打开了第一个选项卡,在00:00:10小时打开了第二个选项卡,并在00:00:13小时内处理第二个选项卡,然后离开项目必须注销的两个选项卡,对吗?但是它在00:00:15上注销,我不知道这里发生了什么,如果它没有正确刷新,当我使用它时,它怎么能在第二个选项卡上停留很长时间?

我试图在空闲时激发用户,使用跨选项卡的javascript,下面的代码可以很好地用于单个选项卡,用于多个选项卡,但工作不正常

例如:我将10秒设置为空闲时间,并将第一个选项卡保留在10秒后抛出用户,假设我在00:00:05小时打开了第一个选项卡,在00:00:10小时打开了第二个选项卡,并在00:00:13小时内处理第二个选项卡,然后离开项目必须注销的两个选项卡,对吗?但是它在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>

var IDLE_超时=10//秒
setItem(“setTimeOut”,“0”);
document.onclick=函数(){
setItem(“setTimeOut”,“0”);
};
document.onmousemove=函数(){
setItem(“setTimeOut”,“0”);
};
document.onkeypress=函数(){
setItem(“setTimeOut”,“0”);
};
document.onfocus=函数(){
setItem(“setTimeOut”,“0”);
};
setInterval(CheckIdleTime,1000);
函数CheckIdleTime(){
localStorage.setItem(“setTimeOut”),parseInt(localStorage.getItem(“setTimeOut”))+1;
if(localStorage.getItem(“setTimeOut”)>=IDLE\u TIMEOUT){
警报('时间到了!您空闲了大约15分钟,请登录继续');
document.location.href=“logout.php”;
}
}

对于应用程序的每个实例(选项卡),此行将每秒运行一次。这意味着,如果有两个选项卡打开,那么它将每秒递增2,而不是每秒递增1

localStorage.setItem("setTimeOut", parseInt(localStorage.getItem("setTimeOut"))+1);

您可以通过使用用户注销的特定时间来解决此问题,而不是倒计时。

而不是增加每个选项卡上的每秒值,这意味着每秒钟它将随着打开的选项卡数而增加,而不是1秒,只需设置交互的当前时间,然后每秒钟比较一次

因此,在事件处理程序中,改为执行以下操作:

localStorage.setItem("lastInteraction", Date.now())
。。。然后在
CheckIdleTime()
函数中,删除
localStorage.setItem()
并将
if
条件更改为:

Number(localStorage.getItem("lastInteraction")) + (IDLE_TIMEOUT * 1000) < Date.now()
Number(localStorage.getItem(“lastInteraction”)+(空闲超时*1000)

该条件以上次交互发生时的时间为准,添加超时常量,然后检查当前时间(现在)是否已超过该值。

嘿,你找到解决方案了吗。。。如果是的,请在这里发布函数脚本…因为我也需要相同的…感谢教授的延迟,下面的解决方案适合我,我被标记为正确。