Javascript 如果使用JS/JQuery中的计时器打开多个页面,而其中一个页面处于非活动状态,则用户会话将超时

Javascript 如果使用JS/JQuery中的计时器打开多个页面,而其中一个页面处于非活动状态,则用户会话将超时,javascript,jquery,logout,session-timeout,Javascript,Jquery,Logout,Session Timeout,我的页面上有一个用户活动。当用户处于非活动状态(未移动鼠标)30分钟时,它会提示用户警告会话即将过期。如果用户未单击“确定”按钮并保持非活动状态,则将自动注销(会话销毁) 现在每25分钟检查一次,在用户打开同一页面的多个选项卡之前,一切正常。如果打开多个选项卡,并且用户正在处理一个选项卡,但另一个选项卡保持打开状态25分钟,则该选项卡将超时 当多个选项卡打开且用户在至少一个选项卡中处于活动状态时,如何防止它超时会话,这意味着用户正在页面的至少一个选项卡中移动鼠标 检测鼠标移动的js代码如下: t

我的页面上有一个用户活动。当用户处于非活动状态(未移动鼠标)30分钟时,它会提示用户警告会话即将过期。如果用户未单击“确定”按钮并保持非活动状态,则将自动注销(会话销毁

现在每25分钟检查一次,在用户打开同一页面的多个选项卡之前,一切正常。如果打开多个选项卡,并且用户正在处理一个选项卡,但另一个选项卡保持打开状态25分钟,则该选项卡将超时

当多个选项卡打开且用户在至少一个选项卡中处于活动状态时,如何防止它超时会话,这意味着用户正在页面的至少一个选项卡中移动鼠标

检测鼠标移动的js代码如下:

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请求,这确实会减慢它的速度。但我的意思是每分钟给柜台打一次电话。