Jquery保持Alive /任何客户端交互?

时间:2015-03-31 12:36:36

标签: javascript jquery

我已经使用了一些jquery keepalive会话插件而没有问题。

我被问到了一些不同的东西。

我们有一些表格(在我开始之前构建)相当大,用户在其中工作了一段时间。该页面永远不会刷新,因此他们单击“保存”并且会话已过期并重定向到登录页面。

我建议使用其中一个插件,只是在会话到期前几分钟提示用户进行ajax调用以保持会话处于活动状态。

然而,他们说,如果他们没有看到提示并将它们全部错过并将其记录下来,那会怎样呢。

他们希望我查一下

  1. 用户是否在过去5分钟内与该网页进行了任何互动。 如果是= Ajax调用保持活动会话,并重置计时器。 如果不是,请继续等待,直到我们在会话超时后2分钟内提示用户。
  2. 他们试图避免提示。

    有没有JS / Jquery知道页面是否有任何客户端交互?

1 个答案:

答案 0 :(得分:0)

不是使用计时器来检查他们是否在过去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);
}