Javascript 没有用户活动时自动注销

Javascript 没有用户活动时自动注销,javascript,jquery,html,Javascript,Jquery,Html,我想在一个网页中实现自动注销功能,当在预定义的时间间隔内(比如15分钟、30分钟、45分钟和60分钟)没有活动时,它将显示登录页面。 我写了一个函数,它监听特定事件并重置计数器。如果计数器超过,我将调用登录页面 这里的问题是,在用户事件上调用setInterval会进行很多函数调用。让我知道,如何避免这种情况。 或者,是否有其他解决方案来实现这一点 var inActiveTimeout = 5; //temp var minInActiveTimeout = 5; var idleTime =

我想在一个网页中实现自动注销功能,当在预定义的时间间隔内(比如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-inActiveTimeout=5//临时雇员
var minInActiveTimeout=5;
var idleTime=minInActiveTimeout;
var idleIntervalTimer;
函数listenEvents(){
idleIntervalTimer=setInterval(logoutTimeCounter,minInActiveTimeout*60000);//1分钟的倍数
$('body').mousemove(函数(e){
log(新日期($.now())+”:“+”鼠标移动“+空闲时间);
idleTime=minInActiveTimeout;
clearInterval(idleIntervalTimer);
idleIntervalTimer=setInterval(logoutTimeCounter,minInActiveTimeout*60000);
});
$('body')。按键(功能(e){
log(新日期($.now())+”:“+”按键“+空闲时间);
idleTime=minInActiveTimeout;
clearInterval(idleIntervalTimer);
idleIntervalTimer=setInterval(logoutTimeCounter,minInActiveTimeout*60000);
});
$('body')。单击(函数(){
log(新日期($.now())+”:“+”正文单击“+空闲时间);
idleTime=minInActiveTimeout;
clearInterval(idleIntervalTimer);
idleIntervalTimer=setInterval(logoutTimeCounter,minInActiveTimeout*60000);
});
}
函数logoutTimeCounter(){
log(新日期($.now())+”:“+”idleTime>>“+idleTime+”inActiveTimeout>>”+inActiveTimeout);
如果(空闲时间===不活动超时){
控制台日志(“”);
$('InactiveTimeoutModal').modal({background:'static',keyboard:false});
$(“#不活动时间输出模式”).model(“显示”);
clearInterval(idleIntervalTimer);
设置超时(logoutTimeCounter,60000);
}
否则如果(空闲时间>不活动时间){//20分钟
log(新日期($.now())+”:“+”>”;
$(“#不活动TimeOutModal”).modal(“隐藏”);
}
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); 

这应该在后端执行

如果不可能的话,,, 您必须在滚动、鼠标移动、单击时监视用户事件

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初始定时器=(1000*15);
var定时器=初始定时器;
var logoutUrl='unlock.html?上次访问的页面='+window.location.pathname;//用于注销页面的URL。
函数注销(){
window.location=logoutUrl;
}
如果(!停止){
setInterval(函数(){
定时器-=1000;
console.log(“Timer:+Timer”);

如果(timer==0 | | timer有一种很好的方法可以做到这一点(但是您需要添加Jquery来绑定事件):


var-stop=false;
var初始定时器=(1000*15);
var定时器=初始定时器;
var logoutUrl='unlock.html?上次访问的页面='+window.location.pathname;//注销页面的URL。
函数注销(){
window.location=logoutUrl;
}
如果(!停止){
setInterval(函数(){
定时器-=1000;
console.log(“Timer:+Timer”);

如果(timer==0 | | timer)这确实是服务器后端的任务,而不是前端代码的任务,这是必需的。我们无权修改后端代码。可以提供帮助和一些ajaxjust ajax以urlvar idleInterval=setInterval(timerIncrement,60000)的形式注销;//1分钟。我不想每分钟调用一次函数。因为我的最小间隔是15分钟。这实际上是服务器后端的任务,而不是前端代码的任务。这是要求。我们无权修改后端代码。可以提供帮助和一些ajaxjust ajax,以注销形式urlvar idleInterval=setInterval(时间增量,60000);//1分钟。我不想每分钟调用一次函数。因为我的最小间隔是15分钟。这能处理所有情况吗?。不。我不这么认为。它会根据您网站的功能而有所不同。我认为监视器滚动和mousemove event.events都很好。我担心使用情况。我认为这种方法可能会覆盖mos@JavaUser这个方法能处理所有情况吗?。不,我不这么认为。它会根据您网站的功能而有所不同。我认为监视器滚动和mousemove event.events都很好。我担心使用情况。我认为这种方法可能会覆盖大部分情况。@JavaUser