这可能有点困惑,请尽力解释。我制作了一个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');
}
答案 0 :(得分:0)
我的想法:当用户处于活动状态时,将时间戳保存在本地存储中,例如'lastActivityAt': '2019-05-21T13:37:12'
。然后使用JS setInterval
定期运行其他过程,该过程每1-5分钟检查一次lastActivityAt
密钥(如果5分钟没有活动,则注销)。所有选项卡之间共享本地存储,因此,如果您在一个选项卡中执行操作,则其他选项卡将检测到它
答案 1 :(得分:0)
您应该真正考虑在服务器端管理会话。这意味着对服务器的请求将在此处重置倒计时。因此,当用户注销后发出请求时,服务器将检查过期的倒计时并发送适当的响应。
如果您真的想在客户端上处理此问题,可以看看localstorage,只要它们位于同一域,就可以跨多个选项卡/窗口存储和访问数据。 / p>