Javascript 会话超时有问题
我需要你对此的宝贵反馈。我已经实现了idletimeout功能,因此如果用户空闲,会话将在3分钟后过期 在三个场景中,我正在重置计时器Javascript 会话超时有问题,javascript,jquery,session-timeout,Javascript,Jquery,Session Timeout,我需要你对此的宝贵反馈。我已经实现了idletimeout功能,因此如果用户空闲,会话将在3分钟后过期 在三个场景中,我正在重置计时器 单击或轻触 处理过程中2秒后 滚动或滚动开始 问题是,有时会话在3分钟之前超时,即使我点击、单击或滚动,并且用户被重定向到登录页面,即使在点击、单击或滚动时调用了该功能,并且调用了resettimers。我正面临着找出漏洞的困难时期 我张贴代码;如果你注意到什么,请告诉我 // Set timeout variables. var timoutNow =
// 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();
});
编辑:设置超时仅工作前两次;下次调用ResetTimer时,setTimeout不起作用,或者由于会话仅按照前两次调用时间超时,我可能会在这里遗漏一些内容……您遇到的真正问题是:调用的“ResetTimer”不够。 为什么调用不够?我会尽力回答的 除了少数例外,所有逻辑都正常。有两个“有问题”的事件不起作用,或者我认为不起作用 1.-现场(活动) 该事件不会被触发,永远不会。您不能将实时事件附加到文档,您需要指定一个节点,如html或body
$("body").live(event, function(){
//console.log("Reset timers: ON TAP OR CLICK");
ResetTimers();
});
这就是为什么当点击计时器时不会重置。
为绑定事件使用变量的另一种(也是推荐的)方法是使用.delegate()
。
因为jquery1.4.3+
是推荐的方法
$(document).delegate("body", event, function(){
//console.log("Reset timers: ON TAP OR CLICK (delegate)");
ResetTimers();
});
其中任何一个(在主体或代理上直播)都可以工作,并且在单击或点击事件时计时器会被重置
2.-鼠标悬停
这件事本身并没有问题,但我认为这是不够的。鼠标盖仅在指针第一次出现在屏幕上的地方触发,如果鼠标不离开窗口,鼠标盖将不会再次触发。也许,在文档上控制“鼠标悬停”的更好或添加的方法是使用onmousemove事件。就像我之前在评论中说的,我不知道你是否想在这方面严格要求,所以我给你留下了一个建议,让我们看看它是否符合你的需要
$(document).mouseover(function() {
console.log("Reset timers: ONMOUSEOVER");
ResetTimers();
});
在我的测试中,事件会被触发很多次,并且计时器会在每个事件上重置,不会出现问题。我希望它能帮助您。您使用的是什么版本的
jQuery
.live()
已经被弃用了一段时间(从v1.7开始):只需一个headup$(“body”).hasClass(“加载处理”)==true
就可以是$(“body”).hasClass(“加载处理”)
它返回布尔值。您可以尝试更改这一行timeoutTimer=setTimeout(“IdleTimeout()”,timoutNow)代码>用这个timeoutTimer=setTimeout(函数(){IdleTimeout()},timoutNow)代码>顺便说一句,此函数在您的代码中从未调用过。@frikinside尝试过此方法,但无效。会话在最后一个setTimeout值之前超时。@frikinside Laodtimercheck()在处理任何请求时在另一个js中被调用。