【问题标题】:Codeigniter: session expiration not workingCodeigniter:会话过期不起作用
【发布时间】:2015-02-07 14:08:07
【问题描述】:

这是我的登录控制器代码:

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 分钟后无法正常工作,一切正常,会话已重置,用户因不活动而退出。

但是我希望控制会话到期的时间,我能做到吗?谢谢!

【问题讨论】:

  • 会话 $this->session->sess_expiration = '10';不能像那样在你的 config.php 中设置超时会话
  • 哦,我明白了,所以我无法动态设置它?

标签: php codeigniter session


【解决方案1】:

如果您想让会话时间动态化,您需要手动设置。

就像我在我的个人网站中所做的那样 (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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-13
    • 2011-07-26
    • 2013-04-12
    • 2015-11-17
    • 1970-01-01
    相关资源
    最近更新 更多