2015-03-31 53 views
0

我已经使用了一些jquery keepalive会话插件没有问题。jquery保持活跃/任何客户端交互?

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

我们有一些形式(在我开始之前构建的),它们相当大,用户在其中工作了一段时间。该页面从不刷新,因此它们单击保存,会话过期并重定向到登录页面。

我建议使用这些插件之一,它会在会话过期前几分钟提示用户,这会使ajax呼叫保持会话的活跃。

但是,他们说,如果他们没有看到提示信息并将它们全部放在一起并将其注销,会怎么样。

他们希望我来检查

  1. 有用户曾在最后5分钟的页面的任何交互。 如果是= Ajax调用保持活动会话,并重置计时器。 如果否,继续等待,直到我们在会话超时2分钟内超时并提示用户。

他们试图避免提示。

无论如何JS/Jquery知道页面是否有任何客户端的交互?

+0

以及使用'mousemove'事件,当鼠标移动时重置一个时间间隔别人叫阿贾克斯达成的具体时间。 – Jai 2015-03-31 12:52:04

回答

0

而不是使用计时器来检查他们是否在过去5分钟内有任何交互,你不能只是在表单发生变化时发送Keepalive吗?这将消除对定时器循环和小负载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); 
} 
+0

谢谢你的想法。我向我的经理提出了同样的想法,但他担心每次终端用户与表单进行交互时总是轮询Keepalive的带宽。这就是为什么我在想,可能会在用户与表单交互时设置一个标志,然后每5分钟一次,如果该标志为真,则将ajax调用为保持活动状态。 – frmrock164 2015-03-31 13:50:11

+0

你仍然可以用上面的代码使用该逻辑。我会相应地更新它。 – wholevinski 2015-03-31 13:52:54

+0

使用计时器添加解决方案;它不是很干,但我只是想让你把它分解成不同的功能。 – wholevinski 2015-03-31 14:06:43