簡體   English   中英

Codeigniter:會話到期不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM