[英]Codeigniter: session expiration not working
這是我的登錄控制器代碼:
public function login_validation(){
$this->load->library('form_validation');
$this->load->model('model_users');
$this->form_validation->set_rules('username', 'Username', 'required|trim|alpha_numeric|xss_clean|strip_tags');
$this->form_validation->set_rules('password', 'Password', 'required|trim|xss_clean|strip_tags');
if ($this->form_validation->run()){
if ($this->model_users->can_log_in()){
$data = array(
'username' => $this->input->post('username'),
'password' => $this->input->post('password')
);
if($this->model_users->get_status($data['username'])){
$data = array(
'username' => $this->input->post('username'),
'privilege' => 'member',
'is_logged_in' => 1,
'counter' => 1
);
$this->session->set_userdata($data);
redirect('member');
} else {
$data = array(
'username' => $this->input->post('username'),
'privilege' => 'admin',
'is_logged_in' => 1
);
$this->session->set_userdata($data);
redirect('admin');
}
} else {
$data = array(
'error' => 1,
);
$this->session->set_userdata($data);
redirect('main/login');
}
} else {
$this->login();
}
}
這是我的成員控制器代碼:
public function __construct(){
parent::__construct();
$this->load->library('session');
if ($this->session->userdata('counter') == 1){
$data = array(
'sessionID' => $this->session->userdata('session_id'),
'counter' => 0
);
$this->session->set_userdata($data);
}
if ($this->session->userdata('sessionID') != $this->session->userdata('session_id')){
$this->session->sess_destroy();
} else {
echo "Error";
}
if (! $this->session->userdata('is_logged_in')){
redirect('main/restricted');
} else {
$privilege = $this->session->userdata('privilege');
if ($privilege == 'admin'){
redirect('main/restricted');
} else {
$this->session->sess_expiration = '10';
//$sessionID = $this->session->userdata('session_id');
print_r($this->session->all_userdata());
}
}
}
我試圖做到這一點,以便在一定時間后,如果用戶處於非活動狀態,則在這段代碼中10秒鍾,他們將被注銷,但是我在20秒鍾后嘗試了該會話,但會話ID仍未更改。
我在想$this->session->sess_expiration = '10';
在等待約13分鍾后無法正常運行,一切工作正常,會話已重置,用戶由於不活動而注銷。
但是我希望控制會話到期的時間,我能做到嗎? 謝謝!
如果要使會話時間動態化,則需要將其手動設置。
就像我在個人網站(CI 3.0)中所做的一樣
遵循測試示例
if (!isset($_SESSION['CREATED'])) {
$_SESSION['CREATED'] = time();
} else if (time() - $_SESSION['CREATED'] > 1800) {
// session started more than 30 minutes ago
session_regenerate_id(true); // change session ID for the current session and invalidate old session ID
$_SESSION['CREATED'] = time(); // update creation time
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.