[英]How to extend session time out in code igniter?
在我的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分鍾以上,因此當用戶播放計時器時會話會過期。 我無法在config中更改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,然后再登錄控制器功能即可。
意味着我們正在通過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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.