douyinmian8151
2016-05-20 06:18
浏览 80
已采纳

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

I have a web application made in Code igniter. What it basically does is -

  1. user logs in to the application
  2. User can do various tasks, one of which is timer based tasks. There is a button which starts the javascript timer
  3. While timer is running he performs certain tasks, and once he is done, he stops the timer. The timer may run for few minutes to few hours.

My Question - While JavaScript timer is running, can we prevent session timeout, so that users are not logged out and their progress is not lost?? My initial thought is that it can't be, at least there isn't an easy way because we are dealing with Javascript timer (Client) and the Session timeouts (server).

Thanks in advance

图片转代码服务由CSDN问答提供 功能建议

我在Code igniter中创建了一个Web应用程序。 它基本上是做什么 -

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

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

    谢谢 提前

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dongtaidai0492 2016-05-20 06:23
    已采纳

    Throughout the timer session keep sending keepalive request every some minutes(preferred 2 to 5 minutes)

    This keepalive request will be the as light as possible and will only get session on the server and will keep it alive

    The response will be also as simple as something like session is still active kind of thing...

    On the other hand you could also maintain a variable on javascript side usersLastActivity, which is updated on each document mousemove or document keydown and few events. If there's been any activity since last request, then send keepalive request ...

    To get more idea about you can have a look at other same kind of question posted here.

    The basic example:

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

    With basic check for typing activity:

    $(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();
        });
    });
    
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题