Javascript 一段时间不活动后自动注销

Javascript 一段时间不活动后自动注销,javascript,Javascript,这可能有点困惑,我会尽力解释。我制作了一个php网站,如果用户不活动/空闲5分钟,就可以注销。我已经使用JavaScript完成了这项工作,我还将提供代码。现在主要的问题是假设我有两个页面“one.php”,“two.php”,并且这两个页面都使用相同的JavaScript代码注销。现在假设我在浏览器的两个不同选项卡中打开了这两个页面,假设我正在使用one.php,但是5分钟后,因为我的two.php处于非活动状态,所以即使我正在使用one.php,我也将注销。所以帮我,伙计们,如何防止这种情况

这可能有点困惑,我会尽力解释。我制作了一个php网站,如果用户不活动/空闲5分钟,就可以注销。我已经使用JavaScript完成了这项工作,我还将提供代码。现在主要的问题是假设我有两个页面“one.php”,“two.php”,并且这两个页面都使用相同的JavaScript代码注销。现在假设我在浏览器的两个不同选项卡中打开了这两个页面,假设我正在使用one.php,但是5分钟后,因为我的two.php处于非活动状态,所以即使我正在使用one.php,我也将注销。所以帮我,伙计们,如何防止这种情况。不要对第一行代码感到困惑,我检查了15秒的不活动状态,但在评论中说是10分钟

    var IDLE_TIMEOUT = (1/4) * 60;  // 10 minutes of inactivity
    var _idleSecondsCounter = 0;
    document.onclick = function() {
        _idleSecondsCounter = 0;
    };
    document.onmousemove = function() {
        _idleSecondsCounter = 0;
    };
    document.onkeypress = function() {
        _idleSecondsCounter = 0;
    };
    window.setInterval(CheckIdleTime, 1000);
    function CheckIdleTime() {
        _idleSecondsCounter++;
        console.log(_idleSecondsCounter);
        var oPanel = document.getElementById("SecondsUntilExpire");
        if (oPanel)
            oPanel.innerHTML = (IDLE_TIMEOUT - _idleSecondsCounter) + "";
        if (_idleSecondsCounter >= IDLE_TIMEOUT) {
            // destroy the session in logout.php 
            document.body.addEventListener('click', logt, true); 
        }
    }

function logt()
{
    window.open('logout.php' , '_SELF');
}

我的想法是:当用户处于活动状态时,在本地存储中保存时间戳,例如,
“lastActivityAt”:“2019-05-21T13:37:12”
。并使用JS
setInterval
定期运行其他程序,每1-5分钟检查一次键
lastActivityAt
(如果5分钟内没有活动,则注销)。Localstorage在所有选项卡之间共享,因此如果您在一个选项卡中执行操作,那么另一个选项卡将检测到它

我的想法:当用户处于活动状态时,在Localstorage中保存时间戳,例如,
'lastActivityAt':'2019-05-21T13:37:12'
。并使用JS
setInterval
定期运行其他程序,每1-5分钟检查一次键
lastActivityAt
(如果5分钟内没有活动,则注销)。在所有选项卡之间共享LoalSturm,所以如果您在一个选项卡中进行操作,则其他选项卡将检测到

< P>。您应该真正考虑在服务器端管理会话。这意味着对服务器的请求将重置那里的倒计时。因此,当用户注销后发出请求时,服务器将检查过期的倒计时并发送正确的响应


如果你真的想在客户机端处理这个问题,你可以看看它允许你在多个选项卡/窗口中存储和访问数据,只要它们属于同一个域。

< P>你应该考虑在服务器端管理你的会话。这意味着对服务器的请求将重置那里的倒计时。因此,当用户注销后发出请求时,服务器将检查过期的倒计时并发送正确的响应


如果您真的想在客户端处理此问题,您可以查看,它允许您跨多个选项卡/窗口存储和访问数据,只要它们位于同一个域。

为什么不在服务器端管理会话?创建会话(或使用任何登录机制)仅持续n分钟。浏览器的每个选项卡都将执行其自己的javascript代码,该代码将独立于其他选项卡,因此最好在服务器上保持会话时间以及每次执行活动时,设为0,你们能解释一下你们的想法吗solutions@shubham在不知道服务器端代码的情况下,@BAMBAMIMPOLIBLE为什么不在服务器端管理会话?使会话(或您使用的任何登录机制)只持续n分钟。浏览器的每个选项卡都将执行其自己的javascript代码,该代码将独立于其他选项卡,因此,最好在服务器上保持会话时间,每次执行活动时,将其设置为0。你们能解释一下您的操作吗solutions@shubham在不知道服务器端代码的情况下,@bambamImposible