I want to implement auto logout functionality in a webpage where it will show the login page when there is no activity on this webpage for a predefined interval(say 15 mins,30 mins,45 mins and 60 mins). I have written a function which listens specific events and resets counter.If the counter exceeds then I will call login page.
Here , the issue is , calling setInterval on user event makes so many function calls . Let me know , how to avoid this. Or , is there any other solution to achieve this.
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;
}
Thanks