会话超时有问题

Having issues with session timeout

本文关键字:有问题 超时 会话      更新时间:2023-09-26

需要您的宝贵反馈。我已经实现了idletimeout功能,这样如果用户空闲,会话将在3分钟内过期。

在三种情况下,我正在重置计时器。

  1. 点击或轻按
  2. 在处理进行中2秒后
  3. on scroll或scrollstart

问题是有时会话在3分钟前超时,即使我点击,点击或滚动,用户被重定向到登录页面,即使函数被调用点击或滚动和重置计时器被调用。我正面临着一段艰难的时间来找出漏洞。

我正在张贴代码;如果你注意到什么,请告诉我。

   // Set timeout variables.
var timoutNow = 180000 ;
var ua = navigator.userAgent; 
var event = ((ua.match(/iPad/i)) || (ua.match(/iPhone/i)) || (ua.match(/iPod/i))) ?    'touchstart' : 'click';
var logoutUrl = Mobile+'/login.html'; // URL to logout page.
var timeoutTimer;
// Start timers.
function StartTimers() {        
    timeoutTimer = setTimeout("IdleTimeout()", timoutNow);
    //console.log(timoutNow);
}
// Reset timers.
function ResetTimers() {       
    clearTimeout(timeoutTimer);     
    StartTimers();       
}
// Processing time check.
function Laodtimercheck()
        {
        setInterval(function(){ 
             if($("body").hasClass("loading-processing")==true)
             {
                ResetTimers();              
             }
        }, 2000);
        }   

// Logout the user.
function IdleTimeout() {
  sessionStorage.clear();
  document.location.href = Mobile+'/login.html';
}
$(document).live(event, function(){
        //console.log("Reset timers: ON TAP OR CLICK");
        ResetTimers();
});
$(document).mouseover(function() {
        //console.log("Reset timers: ONMOUSEOVER");
        ResetTimers();
});
$(window).scroll(function() {
        //console.log("Reset timers: SCROLL");
        ResetTimers();          
});
$(document).live("scrollstart", function(){
//console.log("Reset timers: SCROLLSTART");
                ResetTimers();
});

编辑:setTimeout只工作前两次;下次ResetTimers被调用,但setTimeout不起作用,或者我可能在这里错过了一些东西,因为会话超时,根据前两次调用时间只有....

真正的问题是:"ResetTimers"没有被调用足够。为什么被调用的次数不够?我会试着回答这个问题。

除了一些例外,所有的逻辑都是Ok的。有两个"有问题的"事件不起作用,或者我认为不像你想的那样起作用。

1。- LIVE (event)

事件永远不会被触发。您不能将活动事件附加到文档,您需要指定一个节点,如html或body。

$("body").live(event, function(){
        //console.log("Reset timers: ON TAP OR CLICK");
        ResetTimers();
});

这就是为什么当点击计时器不重置。为绑定事件使用变量的另一种(也是推荐的)方法是使用.delegate()。因为jQuery 1.4.3+是推荐的方法。

$(document).delegate("body", event, function(){
        //console.log("Reset timers: ON TAP OR CLICK (delegate)");
        ResetTimers();
});

其中任何一个(live on body或delegate)都可以工作,计时器在点击或点击事件时重置。

2。——鼠标移至

这个事件本身没有问题,但我认为这是不够的。MouseOver仅在鼠标第一次出现在屏幕上时触发,如果鼠标没有离开窗口,则鼠标再也不会触发。也许,控制"鼠标悬停"在文档上的更好或添加的方法是使用onmousemove事件。就像我之前在评论中说的,我不知道你是否想严格要求,所以我给你留了一个建议,让我们看看它是否符合你的需求。
$(document).mouseover(function() {
        console.log("Reset timers: ONMOUSEOVER");
        ResetTimers();
});

在我的测试中,事件被触发了很多次,计时器在每个事件上被重置,没有问题。