带有多个选项卡的弹出警报的 Javascript 会话超时

jyo*_*sna 4 javascript php tabs session-timeout setinterval

我正在使用 javascript setInterval() 检查用户空闲时间并在自动注销之前显示弹出警报。但它不适用于多个选项卡(适用于单个选项卡)

以下是我的代码:

localStorage.removeItem("idleTimeValue");
var idleInterval    = setInterval(timerIncrement, 1000);


function timerIncrement()  
{
    if(localStorage.getItem("idleTimeValue")) {
        idleTime            = parseInt(localStorage.getItem("idleTimeValue")) + 1; //increments idle time by one second
    } else {
        idleTime            = 1;
    }

    localStorage.setItem("idleTimeValue", idleTime);

    var timeDiff            = 600; 
    var totTimeRemaining    = timeDiff-idleTime;


    if(totTimeRemaining > 0) {

                $('#timeoutWindow').modal('show');
                var minutes = Math.floor(totTimeRemaining / 60);
                var seconds = totTimeRemaining - minutes * 60;
                $('#timeoutRemainingTime').html(minutes+" minutes and "+seconds+" seconds");
    } else {
                window.location = httpHost+"/account/index/logout";
    }

}


$(this).click(function (e) 
{
    localStorage.removeItem("idleTimeValue");
    $('#timeoutWindow').modal('hide');
});
Run Code Online (Sandbox Code Playgroud)

我在 localStorage 中设置空闲时间,例如 -

localStorage.setItem("idleTimeValue", idleTime);
Run Code Online (Sandbox Code Playgroud)

因此,如果我打开 3 个选项卡,setInterval() 函数将在所有选项卡中运行,而且 idleTime 也会增加 3 秒而不是 1 秒,并且时间计算发生错误。

我需要在所有选项卡中显示弹出窗口,并在一个选项卡中单击继续应该反映在所有其他选项卡中。

有人可以为此提出解决方案吗?请帮助伙计们

jyo*_*sna 5

谢谢各位,我得到了解决方案。

我使用了一个 localStorage 值,其中存储了当前时间。如果 localStorage["currentTime"] 中不存在值,则将当前时间存储在 localStorage 中。

var currentTime         = new Date();

if ( !(localStorage.getItem("currentTime")) || (localStorage.getItem("currentTime") == "") )
{
        idleTime        = 0;
        setTimeout(function() { localStorage.setItem("currentTime", currentTime)},5000); // current time is set to localStorage after  seconds (it is for setting in multiple tabs)
} 
Run Code Online (Sandbox Code Playgroud)

显示超时弹出窗口的所有计算都是使用 localStorage.getItem("currentTime") 值完成的。

然后我将 localStorage["currentTime"] 设置为 null 如果用户不空闲(当用户点击某处时)

$(this).click(function (e) 
{
    $('#timeoutWindow').modal('hide');
    localStorage.setItem("currentTime", "");
    idleTime = 0;
});
Run Code Online (Sandbox Code Playgroud)