Javascript 一段时间不活动后自动注销
这可能有点困惑,我会尽力解释。我制作了一个php网站,如果用户不活动/空闲5分钟,就可以注销。我已经使用JavaScript完成了这项工作,我还将提供代码。现在主要的问题是假设我有两个页面“one.php”,“two.php”,并且这两个页面都使用相同的JavaScript代码注销。现在假设我在浏览器的两个不同选项卡中打开了这两个页面,假设我正在使用one.php,但是5分钟后,因为我的two.php处于非活动状态,所以即使我正在使用one.php,我也将注销。所以帮我,伙计们,如何防止这种情况。不要对第一行代码感到困惑,我检查了15秒的不活动状态,但在评论中说是10分钟Javascript 一段时间不活动后自动注销,javascript,Javascript,这可能有点困惑,我会尽力解释。我制作了一个php网站,如果用户不活动/空闲5分钟,就可以注销。我已经使用JavaScript完成了这项工作,我还将提供代码。现在主要的问题是假设我有两个页面“one.php”,“two.php”,并且这两个页面都使用相同的JavaScript代码注销。现在假设我在浏览器的两个不同选项卡中打开了这两个页面,假设我正在使用one.php,但是5分钟后,因为我的two.php处于非活动状态,所以即使我正在使用one.php,我也将注销。所以帮我,伙计们,如何防止这种情况
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”
。并使用JSsetInterval
定期运行其他程序,每1-5分钟检查一次键lastActivityAt
(如果5分钟内没有活动,则注销)。Localstorage在所有选项卡之间共享,因此如果您在一个选项卡中执行操作,那么另一个选项卡将检测到它我的想法:当用户处于活动状态时,在Localstorage中保存时间戳,例如,'lastActivityAt':'2019-05-21T13:37:12'
。并使用JSsetInterval
定期运行其他程序,每1-5分钟检查一次键lastActivityAt
(如果5分钟内没有活动,则注销)。在所有选项卡之间共享LoalSturm,所以如果您在一个选项卡中进行操作,则其他选项卡将检测到 < P>。您应该真正考虑在服务器端管理会话。这意味着对服务器的请求将重置那里的倒计时。因此,当用户注销后发出请求时,服务器将检查过期的倒计时并发送正确的响应
如果你真的想在客户机端处理这个问题,你可以看看它允许你在多个选项卡/窗口中存储和访问数据,只要它们属于同一个域。
< P>你应该考虑在服务器端管理你的会话。这意味着对服务器的请求将重置那里的倒计时。因此,当用户注销后发出请求时,服务器将检查过期的倒计时并发送正确的响应如果您真的想在客户端处理此问题,您可以查看,它允许您跨多个选项卡/窗口存储和访问数据,只要它们位于同一个域。为什么不在服务器端管理会话?创建会话(或使用任何登录机制)仅持续n分钟。浏览器的每个选项卡都将执行其自己的javascript代码,该代码将独立于其他选项卡,因此最好在服务器上保持会话时间以及每次执行活动时,设为0,你们能解释一下你们的想法吗solutions@shubham在不知道服务器端代码的情况下,@BAMBAMIMPOLIBLE为什么不在服务器端管理会话?使会话(或您使用的任何登录机制)只持续n分钟。浏览器的每个选项卡都将执行其自己的javascript代码,该代码将独立于其他选项卡,因此,最好在服务器上保持会话时间,每次执行活动时,将其设置为0。你们能解释一下您的操作吗solutions@shubham在不知道服务器端代码的情况下,@bambamImposible