Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果javascript计时器正在运行,则防止会话超时_Javascript_Php_Codeigniter_Session_Timer - Fatal编程技术网

如果javascript计时器正在运行,则防止会话超时

如果javascript计时器正在运行,则防止会话超时,javascript,php,codeigniter,session,timer,Javascript,Php,Codeigniter,Session,Timer,我有一个用CodeIgniter制作的web应用程序。它的基本功能是—— 用户登录到应用程序 用户可以执行各种任务,其中之一是基于计时器的任务。有一个按钮可以启动javascript计时器 计时器运行时,他执行某些任务,一旦完成,他就会停止计时器。计时器可能运行几分钟到几个小时 我的问题-当JavaScript定时器运行时,我们是否可以防止会话超时,这样用户就不会注销,他们的进度也不会丢失??我最初的想法是不可能,至少没有一个简单的方法,因为我们正在处理Javascript计时器(客户端)和会话

我有一个用CodeIgniter制作的web应用程序。它的基本功能是——

  • 用户登录到应用程序
  • 用户可以执行各种任务,其中之一是基于计时器的任务。有一个按钮可以启动javascript计时器
  • 计时器运行时,他执行某些任务,一旦完成,他就会停止计时器。计时器可能运行几分钟到几个小时
  • 我的问题-当JavaScript定时器运行时,我们是否可以防止会话超时,这样用户就不会注销,他们的进度也不会丢失??我最初的想法是不可能,至少没有一个简单的方法,因为我们正在处理Javascript计时器(客户端)和会话超时(服务器)


    提前感谢

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

    此keepalive请求将尽可能轻,只在服务器上获取会话,并使其保持活动状态

    反应也会很简单,比如会话仍然是活动的之类的事情

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

    要想了解更多信息,你可以看看其他类似的问题

    最基本的例子是:

    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();
        });
    });
    

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

    此keepalive请求将尽可能轻,只在服务器上获取会话,并使其保持活动状态

    反应也会很简单,比如会话仍然是活动的之类的事情

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

    要想了解更多信息,你可以看看其他类似的问题

    最基本的例子是:

    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();
        });
    });
    

    您是否正在通过客户端进行
    轮询
    ?计时器启动时,轮询服务器以保持会话alive@Rayon,这是一个针对患有某种疾病的患者的应用程序。例如,我有频繁眨眼的习惯,我想停止这种行为。为此,我运行计时器,尽量不眨眼。当我眨眼的时候,我停止计时,记下总分钟数。下一次我再试图保持这个闪烁状态。@WatsMyName,您的客户端如何理解会话超时?@Rayon,我们在计时器运行时没有ajax调用。客户端不知道会话超时。但是在codeigniter中,我们将
    $config['sess\u expiration']
    设置为1小时。假设用户正在运行计时器,并且在服务器会话中运行时超时,在某个时间之后,用户停止计时器,这也会将数据保存到数据库中。由于会话已超时,在保存时,会话中将不会有用户信息,如用户ID等。您是否通过客户端执行
    轮询
    ?当计时器启动时,轮询服务器以保持会话alive@Rayon,这是一个针对患有某种疾病的患者的应用程序。例如,我有频繁眨眼的习惯,我想停止这种行为。为此,我运行计时器,尽量不眨眼。当我眨眼的时候,我停止计时,记下总分钟数。下一次我再试图保持这个闪烁状态。@WatsMyName,您的客户端如何理解会话超时?@Rayon,我们在计时器运行时没有ajax调用。客户端不知道会话超时。但是在codeigniter中,我们将
    $config['sess\u expiration']
    设置为1小时。假设用户正在运行计时器,并且在服务器会话中运行时超时,在某个时间之后,用户停止计时器,这也会将数据保存到数据库中。由于会话已经超时,在保存时,会话中将没有用户信息,如用户ID等。