2009-12-03 85 views
0

我正在开发基于会话的项目。我在想,与银行类似,我会创建一张支票,并为用户提供阻止会话超时的能力。javascript设置间隔会话管理

我正在考虑创建一个setInterval来检查需要auth的空白页面。如果计时器接近结束时间,它会发出一个对话建议用户会话即将结束。 “保持登录状态”按钮将重置计时器,并且还会显示一个注销选项。如果设置的时间间隔从检查器页面获得“401”,则当前页面将刷新到登录屏幕。

这是否有意义? setInterval会停止浏览器吗?

另一方面:基于用户交互清除间隔的最简单方法是什么?我需要检查每个按键和/或鼠标事件吗?还是有更广泛的检查用户是否与页面交互的方式(如焦点检查或其他)?

坦卡。


所以,我有一些问题,我使用..的会话处理不是很好的框架,因此,似乎有与更新会话timout,而不是有它的问题超时始终立足于自登录以来的时间,而不是自上次活动以来的时间。无论如何,得到了处理。我现在想知道的问题是,通过检查会话是否仍然通过setInterval进行验证,会话将通过检查进行更新,因此会话永远不会超时。或者,我错过了什么?


我决定用javascript来处理它。在框架配置中将超时设置为never,并仅以setTimeout处理超时。

function alerter(msg){ 
    //warn user session about to expire; give opportunity to save 
} 
function killSess(){ 
    window.location = '/logout';  
} 
function sessTimer(time){ 
timerID = window.setTimeout('killSess();',time);  
} 
function observe(div){ 
    Event.observe(div, 'click', function(){ 
     clearTimeout(timerID); 
     sessTimer(30000); 
    }); 
    Event.observe('bodyDiv', 'keydown', function(e){ 
     clearTimeout(timerID); 
     sessTimer(30000); 
    }); 
} 

回答

1

这是否有意义? setInterval是否会停止浏览器?

这应该很好。只要间隔时间相当长(几秒到几分钟),并且每次迭代都不会增加全局数据结构的大小,我并不认为它会让浏览器陷入困境。

顺便说一句:什么是最简单的方法 给clearInterval基于用户 互动?我需要检查每个按键和/或鼠标事件的 吗?或者 是否有更广泛的检查用户是否与页面 (如焦点检查或其他)交互的方法?

也许将一些事件处理程序添加到顶级页面元素(如容器div)可能会有帮助。

+0

嘿,谢谢......我想我没有考虑的是,如果我在某个时间间隔内对某个auth页面执行get操作,每个get都会重置会话计时器,呃? – stormdrain 2009-12-03 21:00:39

+0

这是正确的。我对setInterval()的使用只是为了在每次尝试增加会话超时的系统上实现keep-alive。也许你可以使用setInterval()来调用一个脚本来增加会话中存储的计数器值,并在计数器值最大值时清除会话?此外,还有一些需要注意的事情:有些浏览器会通过setInterval()重复缓存请求的页面。确保测试并解决此问题。一种方法是将虚拟查询字符串添加到您请求的页面的URL中,并且每次增加该查询字符串中的值。 – jkndrkn 2009-12-03 21:52:40

+0

我决定只将timeout设置为never会更容易,并且仅通过javascript处理会话死亡。这是一个本地系统,所以不要担心可能的安全隐患,这似乎更容易。感谢你的帮助。 – stormdrain 2009-12-04 14:34:55

1

它是非常有意义的,并且setInterval不会停滞浏览器,只要您确保在注册时不再注册它。

您只想在一个特定按钮(“不,不要轮询浏览器”或“注销”)的点击上运行clearInterval,所以我不太清楚您最后一段中的问题。 ..?

除此之外,我只是补充说,在401,你不应该刷新登录屏幕。只要通知用户会话似乎已经丢失,以便用户可以自己决定保存他可能正在使用的任何内容,或者可能再次登录到新选项卡中。

+0

我想我最后一段的意思是我想重置定时器,但不清除它......这样,如果用户与页面交互,它将从0开始对auth检查页面进行轮询。但是,我没有考虑到如果我正在脚本中检查经过身份验证的页面,该会话将通过检查页面以查看会话是否仍然存在而保持活动状态。这就像递归,但倒退。 – stormdrain 2009-12-03 21:03:22