javascript设置间隔会话管理

javascript设置间隔会话管理,javascript,session,setinterval,Javascript,Session,Setinterval,我正在进行一个基于会话的项目。我在想,与银行类似,我会创建一张支票,并为用户提供阻止会话超时的能力 我正在考虑创建一个setInterval来检查需要auth的空白页。如果计时器接近结束时间,它会弹出一个对话框,告知用户会话即将结束。一个“保持登录”按钮将重置计时器,并且还将为他们提供一个注销选项。如果设置的间隔从checker页面获得“401”,则当前页面将刷新到登录屏幕 这有意义吗?设置间隔会使浏览器陷入困境吗 旁白:基于用户交互的clearInterval最简单的方法是什么?我是否需要检查

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

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

这有意义吗?设置间隔会使浏览器陷入困境吗

旁白:基于用户交互的clearInterval最简单的方法是什么?我是否需要检查每个按键和/或鼠标事件?或者有没有更广泛的方法来检查用户是否与页面交互(比如焦点检查之类的)

坦卡


所以,我使用的框架有一些问题。。会话处理不是很好,因此更新会话超时似乎有问题,而不是总是根据登录后的时间而不是上次活动后的时间来超时。不管怎样,我已经处理好了。我现在想知道的问题是,通过检查会话是否仍然通过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);
    });
}
这有意义吗?会 设置间隔是否会使浏览器陷入困境

这应该行得通。只要间隔相当大(几秒到一分钟),并且不会随着每次迭代而增加全局数据结构的大小,我不认为它会使浏览器陷入困境

旁白:最简单的方法是什么 基于用户的clearInterval 相互作用我需要检查一下你的行李吗 每次按键和/或鼠标事件?或 是否有更广泛的方法来检查 用户正在与页面交互 (像焦点检查之类的)


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

这很有意义,而且只要确保在已注册的情况下不再注册,setInterval不会使浏览器陷入困境

您只需单击一个特定按钮(“不,不要轮询浏览器”或“注销”)即可运行
clearInterval
,因此我不太明白您最后一段中的问题


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

嘿,谢谢。。。我猜我没想到的是,如果我在一个间隔上做一个<代码>获取<代码>到某个AuthPage,这些GET的每个都会重置会话计时器,对吗?我使用setInterval()只是为了在一个系统上实现keep alive,该系统与我每次增加会话超时的尝试都进行了斗争。也许您可以使用setInterval()调用一个脚本,该脚本增加会话中存储的计数器值,并在计数器值达到最大值时清除会话?另外,需要注意的是:一些浏览器会缓存通过setInterval()反复请求的页面。确保测试并解决此问题。一种方法是在请求页面的URL中添加一个虚拟查询字符串,每次都在该查询字符串中增加一个值。我决定只需将超时设置为“从不”,并通过javascript专门处理会话死亡,这会更容易。这是一个本地系统,因此不太担心可能的安全影响,这似乎容易得多。谢谢你的帮助。我想我最后一段的意思是我想重置计时器,而不是清除它。。。这样,如果用户与该页交互,它将从0开始轮询auth check页。但我没有考虑这样一个事实:如果我正在检查脚本中的一个经过验证的页面,那么会话将通过检查页面来查看会话是否仍然存在。这就像是递归,但是向后的。