Javascript 如果使用JS/JQuery中的计时器打开多个页面,而其中一个页面处于非活动状态,则用户会话将超时
我的页面上有一个用户活动。当用户处于非活动状态(未移动鼠标)30分钟时,它会提示用户警告会话即将过期。如果用户未单击“确定”按钮并保持非活动状态,则将自动注销(会话销毁) 现在每25分钟检查一次,在用户打开同一页面的多个选项卡之前,一切正常。如果打开多个选项卡,并且用户正在处理一个选项卡,但另一个选项卡保持打开状态25分钟,则该选项卡将超时 当多个选项卡打开且用户在至少一个选项卡中处于活动状态时,如何防止它超时会话,这意味着用户正在页面的至少一个选项卡中移动鼠标 检测鼠标移动的js代码如下:Javascript 如果使用JS/JQuery中的计时器打开多个页面,而其中一个页面处于非活动状态,则用户会话将超时,javascript,jquery,logout,session-timeout,Javascript,Jquery,Logout,Session Timeout,我的页面上有一个用户活动。当用户处于非活动状态(未移动鼠标)30分钟时,它会提示用户警告会话即将过期。如果用户未单击“确定”按钮并保持非活动状态,则将自动注销(会话销毁) 现在每25分钟检查一次,在用户打开同一页面的多个选项卡之前,一切正常。如果打开多个选项卡,并且用户正在处理一个选项卡,但另一个选项卡保持打开状态25分钟,则该选项卡将超时 当多个选项卡打开且用户在至少一个选项卡中处于活动状态时,如何防止它超时会话,这意味着用户正在页面的至少一个选项卡中移动鼠标 检测鼠标移动的js代码如下: t
timer = 0;
function cIncrement() {
if (timer == 25) {
//25 minutes passed warn user that in 5 minutes it will expire
//here is the code that prompts user with dialog
if (OK clicked on dialog) {
timer = 0;
} else {
//execute logout script.
}
}
if (timer == 30) {
//30 minutes passed log user out
//script to log user out
}
}
$(function() {
var interval = setInterval("cIncrement()", 60000); //increment every minute
//reset timer on mouse move
$(document).mousemove(function(e) {
timer = 0;
});
});
注意:打开1个选项卡时,上述代码工作正常
我将如何更改此设置,以便如果有2个或更多选项卡打开,并且用户在其中任何一个选项卡中处于活动状态,则应将计时器重置为0,假定您有一个服务器端会话对象。大概您的服务器端会话对象也有某种过期时间,因此您可以在用户只需关闭浏览器、或只需关闭笔记本电脑盖并休假几周等情况下获取会话。可能活动无论哪个选项卡/窗口具有焦点,都会重设服务器端活动超时 因此,在
cIncrement
中,启动一个Ajax请求,询问服务器上一个活动发生在多长时间之前,并使用响应重置计时器
如果您想在只捕获鼠标移动的情况下仍保持会话打开状态,那么,发送页面的当前计时器值,并使用它来移动会话刷新时间(如果它是该会话中的最新活动)。但是在每个鼠标上移动发送ajax请求会减慢它的速度,因为如果鼠标不断移动到更新/重设时间,将会有大量ajax请求,这确实会减慢它的速度。但我的意思是每分钟给柜台打一次电话。