我正在一个具有重要数据的私人网站上工作,我想注销任何没有做任何事情的用户10分钟(忘记标签在后台打开作为一个例子)。我怎么能做到这一点,只是运行一个事件监听器与计时器鼠标点击是好的,或者有其他更好的解决方案吗?
这只能通过JavaScript实现。因为我们的web应用可以在多个选项卡中打开,所以最好将用户的最后一个活动存储在localStorage
中。首先让我们声明事件,我们认为是用户活动和存储用户活动的时间在localStorage
document.addEventListener("mousemove", () =>{
localStorage.setItem('lastActvity', new Date())
});
document.addEventListener("click", () =>{
localStorage.setItem('lastActvity', new Date())
});
接下来,让我们创建interval,它将在每个给定的间隔检查。
let timeInterval = setInterval(() => {
let lastAcivity = localStorage.getItem('lastActvity')
var diffMs = Math.abs(new Date(lastAcivity) - new Date()); // milliseconds between now & last activity
var seconds = Math.floor((diffMs/1000));
var minute = Math.floor((seconds/60));
console.log(seconds +' sec and '+minute+' min since last activity')
if(minute == 10){
console.log('No activity from last 10 minutes... Logging Out')
clearInterval(timeInterval)
//code for logout or anything...
}
},1000)
用于鼠标移动(不是单击)的事件侦听器,以及用于键盘单击的事件侦听器也应该完成这项工作。
假设您想在用户不活动10分钟后注销该用户。只需在用户登录时启动计时器(10分钟),每次用户进行任何鼠标移动或任何键盘点击时,使用事件侦听器重置计时器。如果没有活动,在10分钟后,计时器应该执行注销功能。
<标题>更新:就像Vishnu Bhadoriya建议的那样,在这种情况下,空闲的解决方案应该是在客户端和服务器之间实现心跳。现在,在本例中,鼠标和键盘侦听器将向服务器发送生命线事件,服务器将保持其会话活动。当生命线事件超过10分钟(活动阈值)未被服务器接收时,服务器可以向客户端发出一个事件,该事件可以将客户端注销或简单地使客户端的认证令牌无效
标题>