0

我正在从事一个基于会话的项目。我在想,类似于银行,我会创建一张支票并为用户提供阻止会话超时的能力。

我正在考虑创建一个 setInterval 来检查需要身份验证的空白页面。如果计时器接近结束时间,它会抛出一个对话框,告知用户会话即将结束。“保持登录”按钮将重置计时器,并且还会向他们提供注销选项。如果设置的时间间隔从检查页面获得“401”,则当前页面将刷新到登录屏幕。

这有意义吗?setInterval 会阻塞浏览器吗?

顺便说一句:根据用户交互清除Interval 的最简单方法是什么?我需要检查每个按键和/或鼠标事件吗?或者是否有更广泛的方法来检查用户是否正在与页面交互(如焦点检查或其他东西)?

坦卡。


所以,我使用的框架有一些问题。会话处理不是很好,因此更新会话超时似乎有问题,而不是总是根据登录后的时间让它超时,而不是自上次活动以来。总之,处理好了。我现在想知道的问题是,通过检查会话是否仍然通过 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);
    });
}
4

2 回答 2

1

这有意义吗?setInterval 会阻塞浏览器吗?

这应该可以正常工作。只要间隔相当大(几秒到一分钟)并且每次迭代都不会增加全局数据结构的大小,我预计它不会让浏览器陷入困境。

顺便说一句:根据用户交互清除Interval 的最简单方法是什么?我需要检查每个按键和/或鼠标事件吗?或者是否有更广泛的方法来检查用户是否正在与页面交互(如焦点检查或其他东西)?

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

于 2009-12-03T16:21:37.713 回答
1

这很有意义,而且 setInterval 不会让浏览器陷入困境,只要您确保在它已经注册时不再再次注册它。

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

除此之外,我将在 401 时添加,您不应该刷新到登录屏幕。只需通知用户会话似乎已丢失,以便用户可以自行决定保存他可能正在使用的任何内容,或者可能在新选项卡中再次登录。

于 2009-12-03T16:21:41.877 回答