我正在开发一个基于 session 的项目。我在想,与银行类似,我会创建一张支票并为用户提供阻止 session 超时的能力。
我正在考虑创建一个 setInterval 来检查需要身份验证的空白页面。如果计时器接近结束时间,它会弹出一个对话框,通知用户 session 即将结束。 “保持登录”按钮将重置计时器,并且还会向他们提供注销选项。如果设置的时间间隔从检查器页面获取“401”,则当前页面将刷新到登录屏幕。
这有道理吗? setInterval 会让浏览器陷入困境吗?
顺便说一句:基于用户交互来清除间隔的最简单方法是什么?我需要检查每个按键和/或鼠标事件吗?或者是否有更广泛的方法来检查用户是否正在与页面交互(例如焦点检查或其他)?
短歌。
<小时/>所以,我使用的框架存在一些问题。 session 处理不是很好,因此更新 session 超时而不是始终基于登录后的时间超时似乎存在问题,而不是自上次事件以来。无论如何,已经处理好了。我现在想知道的问题是,通过检查 session 是否仍然通过 setInterval 进行身份验证, session 将通过检查进行更新,因此 session 永远不会超时。或者,我错过了什么吗?
<小时/>我决定只用 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);
});
}
最佳答案
Does this make sense? Would the setInterval bog down the browser?
这应该可以正常工作。只要间隔相当大(几秒到一分钟)并且每次迭代不会增加全局数据结构的大小,我预计它不会使浏览器陷入困境。
As an aside: what is the easiest way to clearInterval based on user interaction? Would I need to check for every keypress, and/or mouse event? Or is there a broader way of checking if the user is interacting with the page (like a focus check or something)?
也许向顶级页面元素(例如容器 div
)添加一些事件处理程序可能会有所帮助。
关于javascript设置间隔 session 管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1840990/