如何在代码点火器中延长会话时间?

时间:2016-05-25 04:54:13

标签: php codeigniter session timeout

在我的config.php中,配置文件中与会话相关的配置如下:

$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 1800; //30 minutes
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = FALSE;
$config['sess_use_database']    = TRUE;
$config['sess_table_name']      = 'rd_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 300;

对于网站的正常使用,会话在登录半小时后到期。但是我的网站上有一个功能,用户可以在其中播放基于计时器的任务。 例如,当用户点击按钮时,计时器启动,他在一段时间后完成某项任务,完成后他点击停止按钮,计时器停止,时间保存在数据库中。

这里的问题是任务可能超过30分钟,因此当用户正在玩计时器时会话到期。我无法在配置中更改sess过期时间,因为对于其他用户(谁不玩定时器),它应该在30分钟后超时。因此,正如other thread中所建议的那样,当用户启动计时器时,我会进行ajax调用以动态更改sess过期时间。这是方法,称为 -

 public function sessiontimeout($time){
    $session_lifetime = $time > 0  ? $time: 864000;
    $this->config->set_item('sess_expiration', $session_lifetime);
    echo "Session lifetime set to ".$this->config->item("sess_expiration")." seconds";
    exit;
}

然而,这不起作用,用户在30分钟内退出。如何在单击定时器时实现此目的,调用ajax调用以扩展现有超时,当定时器停止时,会话过期时间重置为30分钟。

由于

2 个答案:

答案 0 :(得分:2)

您好,您不需要更改配置文件。您只需在时间间隔后运行ajax,即可记录任何后续控制器功能。
意味着我们通过ajax请求访问登录后的url。 codeigniter自动更新当前登录用户会话。那很简单

答案 1 :(得分:2)

唯一有用的是,我每隔2分钟拨打一次ajax电话,然后检查会话是否会过期。我在会议到期前5分钟重置会议。代码

Javascript ajax call。

var sessionTimer = setInterval(function(){
  $.ajax({
            url: '/ajax/sessiontimeout',
            beforeSend: function(){},
            success: function(data){
                console.info(data);
            }
        });
},120000);

和控制器方法

public function sessiontimeout(){

        $lastActivity = $this->session->userdata('last_activity');
        $configtimeout = $this->config->item("sess_expiration");
        $sessonExpireson = $lastActivity+$configtimeout;


        $threshold = $sessonExpireson - 300; //five minutes before session time out

        $current_time = time();

        if($current_time>=$threshold){
            $this->session->set_userdata('last_activity', time()); //THIS LINE DOES THE TRICK
            echo "Session Re-registered";
        }else{
            echo "Not yet time to re-register";
        }

        exit;
    }