Jquery keep Alive/任何客户端交互

Jquery keep Alive / Any client side interaction?

本文关键字:客户端 交互 任何 keep Alive Jquery      更新时间:2023-09-26

我使用了一些jquery keepalive会话插件,但没有问题。

有人问我一些不同的东西。

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

我建议使用其中一个插件,它只需在会话到期前几分钟提示用户,就可以调用ajax来保持会话的有效性。

然而,他们表示,如果他们没有看到提示,错过了所有提示并将其注销,会怎么办。

他们希望我检查

  1. 用户在过去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);
}