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