会话超时有问题
Having issues with session timeout
需要您的宝贵反馈。我已经实现了idletimeout功能,这样如果用户空闲,会话将在3分钟内过期。
在三种情况下,我正在重置计时器。
- 点击或轻按
- 在处理进行中2秒后
- 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();
});
在我的测试中,事件被触发了很多次,计时器在每个事件上被重置,没有问题。
相关文章:
- 这个条件语句的逻辑有问题
- 什么'这个javascript代码getElementById有问题
- 如何处理流星变量&对miniMongo有问题
- 谷歌表单xml有问题
- Html、css和jQuery.我的代码有问题
- 有问题的突出显示(悬停)一个系列,突出显示图表
- D3 折线图示例 - 日期有问题
- 页面刷新后javascript内存泄漏有问题吗?为什么?
- 有问题的键代码186和222,如何捕捉它们
- 循环 += 十进制变量的 javascript 有问题
- 随机数生成器,what'我的方法/统计数据有问题吗?[JS]
- 为了在列表中搜索,角度过滤器有问题
- 我对按钮的作用域有问题'的听众
- 为什么我的setInterval有问题
- Javascript在每个有问题的控件上输出一条错误消息
- url的正则表达式有问题
- 没有按钮的Javascript滚动器有问题
- 我的javascript函数有问题,我认为是document.getElementById('vodObj
- Jquery中的mousemove和图像有问题
- 会话超时有问题