当没有用户活动时自动注销
Auto logout when there is no user activity
我想在一个网页中实现自动注销功能,当该网页在预定义的时间间隔内(例如15分钟、30分钟、45分钟和60分钟)没有活动时,它将显示登录页面。我写了一个函数,它监听特定的事件并重置计数器。如果计数器超过,我将调用登录页面。
这里的问题是,在用户事件上调用setInterval会导致很多函数调用。让我知道,如何避免这种情况。或者,还有其他解决方案可以实现这一点吗。
var inActiveTimeout = 5; //temp
var minInActiveTimeout = 5;
var idleTime = minInActiveTimeout;
var idleIntervalTimer;
function listenEvents() {
idleIntervalTimer = setInterval(logoutTimeCounter, minInActiveTimeout * 60000); // multiple of 1 minute
$('body').mousemove(function (e) {
console.log(new Date($.now()) + " :: " + "Mouse Move"+idleTime);
idleTime = minInActiveTimeout;
clearInterval(idleIntervalTimer);
idleIntervalTimer = setInterval(logoutTimeCounter, minInActiveTimeout * 60000);
});
$('body').keypress(function (e) {
console.log(new Date($.now()) + " :: " + "Key Press"+idleTime);
idleTime = minInActiveTimeout;
clearInterval(idleIntervalTimer);
idleIntervalTimer = setInterval(logoutTimeCounter, minInActiveTimeout * 60000);
});
$('body').click(function () {
console.log(new Date($.now()) + " :: " + "Body Click"+idleTime);
idleTime = minInActiveTimeout;
clearInterval(idleIntervalTimer);
idleIntervalTimer = setInterval(logoutTimeCounter, minInActiveTimeout * 60000);
});
}
function logoutTimeCounter() {
console.log(new Date($.now()) + " :: " + "idleTime >>" + idleTime + "inActiveTimeout >>" + inActiveTimeout);
if (idleTime === inActiveTimeout) {
console.log(" <<Warning >>");
$('#InactiveTimeoutModal').modal({backdrop: 'static', keyboard: false});
$("#InactiveTimeoutModal").modal("show");
clearInterval(idleIntervalTimer);
setTimeout(logoutTimeCounter, 60000);
}
else if (idleTime > inActiveTimeout) { // 20 minutes
console.log(new Date($.now()) + " :: " + "<< Time elapsed Hide and Logout>>");
$("#InactiveTimeoutModal").modal("hide");
}
idleTime = idleTime + minInActiveTimeout;
}
感谢
应该执行后端。
如果不可能,,,您必须监视滚动、鼠标移动、单击等用户事件。
var previous = 0;
document.addEventListener("mousemove", function(evt) {
if(previous > 0) return;
previous++;
});
document.addEventListener("click", function(evt) {
if(previous > 0) return;
previous++;
});
window.addEventListener("scroll", function(evt) {
if(previous > 0) return;
previous++;
});
//other event check..
//document.addEventListener....
setInterval(function(){
if(previous > 0 )console.log("detect user action");
else console.log("not detect user action");
},10000);
有一个很好的方法可以做到这一点(但您需要添加Jquery来绑定事件):
var stop = false;
var initial_timer = (1000*15);
var timer = initial_timer;
var logoutUrl = 'unlock.html?last_page_visited='+window.location.pathname ; // URL to logout page.
function logOut(){
window.location = logoutUrl;
}
if(!stop){
setInterval(function(){
timer-=1000;
console.log("Timer:"+timer);
if(timer==0 || timer<0){
logOut()
stop = true;
}
}, 1000);
}
$('body').bind('click dblclick mousedown mouseenter mouseleave keyup mouseover',
function(e){
timer = initial_timer;
});
有关更多详细信息或完整示例:https://github.com/Sanix-Darker/LogOutTimer
请在此处查看:https://jsbin.com/dabobil/edit?html,js,控制台,输出
相关文章:
- 使用Dnamics CRM 2011中的JavaScript读取子网格的所有记录,而不考虑活动页面
- 字符串在将其传递给另一个活动Android JavaScript时读取Null
- 活动选项卡's源代码-获取变量s值
- 在Angular 2中布线期间保持零部件处于活动状态
- 在ajax成功后,cluetip不适用于首次点击活动元素
- 如何使bxslider仅在移动视图中处于活动状态
- JQuery中的活动搜索栏
- 显示具有服务器端自动时间注销的同步倒计时计时器
- 悬停下拉菜单即使在鼠标移出后也保持活动状态
- 将js添加到wordpress中以突出显示css活动菜单
- Google 脚本:用于创建日历活动的脚本运行时不会出错,但不会执行任何操作
- 手动创建旋转活动指示器
- 当没有用户活动时自动注销
- Jasvascript :不活动后发出警报通知,并在 5 分钟后注销
- 如果在页面上未找到活动,则自动注销
- javascript自动注销10分钟的非活动状态
- 如果jsp页面在3分钟内处于非活动状态,我如何在3分钟后注销它
- 在一段时间不活动后注销用户
- 如何在 30 分钟后注销非活动用户
- 在处于非活动状态后注销电子表格