【问题标题】:Prevent session time out if javascript timer is running如果 javascript 计时器正在运行,则防止会话超时
【发布时间】:2016-05-20 06:18:43
【问题描述】:

我有一个用 Code igniter 制作的 Web 应用程序。它的基本作用是 -

  1. 用户登录应用程序
  2. 用户可以执行各种任务,其中之一是基于计时器的任务。有一个按钮可以启动 javascript 计时器
  3. 当计时器运行时,他会执行某些任务,一旦完成,他就会停止计时器。计时器可能会运行几分钟到几小时。

我的问题 - 当 JavaScript 计时器运行时,我们是否可以防止会话超时,以便用户不会注销并且他们的进度不会丢失?我最初的想法是不可能,至少没有简单的方法,因为我们正在处理 Javascript 计时器(客户端)和会话超时(服务器)。

提前致谢

【问题讨论】:

  • 你是在通过客户端发送poll 吗?
  • 当计时器到时轮询您的服务器以保持会话活动
  • @Rayon,它适用于患有某种疾病的患者。例如,就像我有频繁眨眼的习惯,我想停止这种情况。为此,我运行计时器,并尽量避免眨眼。当我眨眼时,我会停止计时器并记下总分钟数。下次我试着让这个眨眼更久。
  • @WatsMyName,您的客户端如何理解会话超时?
  • @Rayon,我们在计时器运行时没有 ajax 调用。客户端不知道会话超时。但是在 codeigniter 中,我们将 $config['sess_expiration'] 设置为 1 小时。假设用户正在运行一个计时器,并且在服务器会话中运行时超时,一段时间后用户停止了计时器,这也将数据保存到数据库中。由于会话已经超时,在保存时,会话中将没有用户信息,如用户 ID 等。

标签: javascript php codeigniter session timer


【解决方案1】:

在整个计时器会话中,每隔几分钟(最好是 2 到 5 分钟)发送一次 keepalive 请求

这个keepalive请求将尽可能的轻,并且只会在服务器上获得会话并保持它处于活动状态

响应也将很简单,就像会话仍然处于活动状态......

另一方面,您还可以在 javascript 端 usersLastActivity 上维护一个变量,该变量会在每个文档 mousemove 或文档 keydown 和一些事件上更新。如果自上次请求以来有任何活动,则发送 keepalive 请求 ...

要了解更多关于您的信息,可以查看here 发布的其他同类问题。

基本示例:

setInterval(function(){
   $.get('/ImStillAlive.action');
}, 300000); // 5 mins * 60 * 1000

对打字活动进行基本检查:

$(function(){
    var lastUpdate = 0;
    var checkInterval = setInterval(function(){
       if(new Date().getTime() - lastUpdate > 300000){
           clearInterval(checkInterval);
       }else{   
            $.get('/ImStillAlive.action');
       }
    }, 300000); // 5 mins * 60 * 1000

    $(document).keydown(function(){
         lastUpdate = new Date().getTime();
    });
});

【讨论】:

    猜你喜欢
    • 2012-01-03
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 2012-05-05
    • 2016-09-11
    • 2010-12-30
    相关资源
    最近更新 更多