我正在开发基于会话的项目。我在想,与银行类似,我会创建一张支票,并为用户提供阻止会话超时的能力。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);
});
}
嘿,谢谢......我想我没有考虑的是,如果我在某个时间间隔内对某个auth页面执行get操作,每个get都会重置会话计时器,呃? – stormdrain 2009-12-03 21:00:39
这是正确的。我对setInterval()的使用只是为了在每次尝试增加会话超时的系统上实现keep-alive。也许你可以使用setInterval()来调用一个脚本来增加会话中存储的计数器值,并在计数器值最大值时清除会话?此外,还有一些需要注意的事情:有些浏览器会通过setInterval()重复缓存请求的页面。确保测试并解决此问题。一种方法是将虚拟查询字符串添加到您请求的页面的URL中,并且每次增加该查询字符串中的值。 – jkndrkn 2009-12-03 21:52:40
我决定只将timeout设置为never会更容易,并且仅通过javascript处理会话死亡。这是一个本地系统,所以不要担心可能的安全隐患,这似乎更容易。感谢你的帮助。 – stormdrain 2009-12-04 14:34:55