Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.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
Php 如何在CodeIgniter中延长会话超时?_Php_Codeigniter_Session_Timeout - Fatal编程技术网

Php 如何在CodeIgniter中延长会话超时?

Php 如何在CodeIgniter中延长会话超时?,php,codeigniter,session,timeout,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'] =

在我的
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分钟后超时。所以,正如中所建议的,当用户启动计时器时,我会发出一个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分钟


谢谢

您好,您不需要更改配置文件。您只需在一个时间间隔后运行ajax,即可运行any after logged controller函数

意味着我们正在通过ajax请求访问登录后的url。codeigniter自动更新当前登录用户会话。这很简单,您不需要更改配置文件。您只需在一个时间间隔后运行ajax,即可运行any after logged controller函数

意味着我们正在通过ajax请求访问登录后的url。codeigniter自动更新当前登录用户会话。这很简单

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

Javascript ajax调用

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

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

Javascript ajax调用

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