闲置一段时间后自动注销

时间:2019-05-21 10:30:57

标签: javascript

这可能有点困惑,请尽力解释。我制作了一个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');
}

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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