javascript - 当没有用户事件时自动注销

标签 javascript jquery html

我想在网页中实现自动注销功能,当该网页在预定义的时间间隔(例如 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); 

关于javascript - 当没有用户事件时自动注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36596521/

相关文章:

javascript - 使用 jquery 制作 id 为 "."的按钮

javascript - 使用 Jquery 选择最后一个 div 的所有子项?

php - 使用一个ajax响应更新html中的两个相同值

javascript - ArrayBuffer 到 base64 编码的字符串

javascript - 从for循环中检索值到jquery

javascript - Vue - 是否可以在组件的计算属性中使用 Vuex getter?

jquery isotope 具有无限滚动和图像预加载器

javascript - 如何使右箭头可点击,它应该模拟按下回车键

Javascript 在循环内添加自定义事件类

javascript - Neo4j SET(更新)节点属性错误