我使用了一些jquery keepalive会话插件,但没有问题。
有人问我一些不同的东西。
我们有一些相当大的表单(在我开始这里之前构建),用户在其中工作一段时间。页面永远不会刷新,因此他们单击保存,会话将过期并重定向到登录页面。
我建议使用其中一个插件,它只需在会话到期前几分钟提示用户,就可以调用ajax来保持会话的有效性。
然而,他们表示,如果他们没有看到提示,错过了所有提示并将其注销,会怎么办。
他们希望我检查
- 用户在过去5分钟内是否与页面进行过任何交互。如果Yes=Ajax调用以保持会话有效,则重置计时器。如果否,请继续等待,直到我们在会话超时后2分钟内到达并提示用户
他们试图避开提示。
JS/Jquery是否可以知道页面是否有任何客户端交互?
与其用计时器检查他们在过去5分钟内是否有任何互动,难道你不能在表单更改时发送你的保活信息吗?它将消除对定时器循环和小负载ajax调用的需求,仅仅为了保持会话的活力,这根本不会影响性能。
如果您仍然希望保持计时器循环,我仍然建议在表单元素上使用change事件。改变形式意味着他们在与之互动,我认为这满足了他们的要求。
编辑:更新以使用计时器
var idle = true;
function finalIdleCheck(prompt){
if(idle){
if(prompt){
alert("last warning!");
}
//Tighten the idle check time loop; may even want to go < 30s
setTimeout(finalIdleCheck, 30*1000);
} else {
//Ajax stuff to keep session alive
idle = true; //Reset idle flag
}
}
function checkIdle(){
if(idle){
//Warn them
alert("You've been idle");
setTimeout(function(){
finalIdleCheck(true);
}, 60*2*1000);
} else {
//Ajax stuff to keep session alive
idle = true; //Reset idle flag
}
}
$(document).ready(function(){
$("form input").on("change", function(){
idle = false;
}
setTimeout(idleCheck, 60*5*1000);
}