帮助w / Codeigniter会话到期时间

时间:2010-11-15 23:37:31

标签: php session codeigniter

我想在Codeigniter中动态设置会话到期时间。我是自动加载会话类。我有一个视图,其中包含用户单击的复选框(记住我)。现在,如果他们单击复选框或不是,则到期时间保持不变:/


    // Config.php
    $config['sess_expiration']      = 7200;

    // Controller
    if ($this->input->post('remember_me') == 'TRUE')
    {
    $this->session->remember_me();
    }

    $newdata = array(
    'failed_login'  => 0,
    'user_name'  => $this->input->post('user_name'),
        'logged_in' => TRUE
    );

    $this->session->set_userdata($newdata);

    // MY_Session.php
    class MY_Session extends CI_Session {

    function remember_me()
    {
        $this->sess_expiration = 172800;
    }

    }

3 个答案:

答案 0 :(得分:3)

如果您需要实施“记住我”功能 - 那么您已经以错误的方式启动了它。

您需要再创建一个包含字段user_id | token的数据库表。

然后,在用户登录后(选中“记住我”复选框) - 生成随机令牌并插入带有当前user_id和该令牌的新行。另外 - 使用相同的标记值设置remember cookie。

现在,如果用户进入您的网站,未经过身份验证并拥有一些令牌,您始终可以找到该令牌并对用户进行身份验证(每个令牌都是唯一且与特定user_id明确相关)。

答案 1 :(得分:0)

这是我一直在玩的解决方案。

您可以编辑domain.com/system/libraries/Session.php

中的功能
function _set_cookie($cookie_data = NULL)

评论

// $expire = ($this->sess_expire_on_close === TRUE) ? 0 : $this->sess_expiration + time();

然后添加

    if(isset($this->userdata['rememberme'])){
        // If they want to stay connected
        if( $this->userdata['rememberme'] == 1) {
            $expire = 0;
        } else {
            $expire = time() + $this->sess_expiration;
        }
    } else {
        $expire = time() + $this->sess_expiration;
    }

请告诉我这是否有帮助或修改我的代码以帮助我。谢谢。

答案 2 :(得分:0)

$data = array(
    'username' => $this->input->post('username'),
    'ADMIN_is_logged_in' => true
);

$this->session->sess_expiration = '14400';// expires in 4 hours
$this->session->set_userdata($data);// set session