根据用户选择更改CodeIgniter会话配置

时间:2011-12-13 00:39:40

标签: php codeigniter session

我正在尝试在登录表单中实现“记住我”复选框。查看文档我发现默认情况下我可以更改配置设置:

$config['sess_expiration'] = 10; // I set it to 10 seconds for testing

我想要做的是无限期地延长这个时间,或者至少延长这个时间,如果用户选中一个方框的话。当输入通过POST传递时,我正在更改sess_expiration的值,我可以看到值已更改,但它在默认时间后仍然过期,而不是在新时间之后。

if ( $this->input->post('rememberMe') )
{
    $this->config->set_item('sess_expiration', 0);
}

在我设置会话信息之前,我调用了这个,如果我回应它,​​我看到值已正确设置,但我等待,然后我的会话消失了,我被重定向回我的登录页面。

$this->session->set_userdata(
    array('user' => array(
        'userId' => $user->userId,
        'userName' => $user->userName,
        'userLevel' => $user->userLevel,
        'userEmail' => $user->userEmail,
        'userCreated' => $user->userCreated,
        'userUpdated' => $user->userUpdated,
        'userStatus' => $user->userStatus
    ),
    'loggedIn' => $user->userId
));

我这样做错了吗?我在这个问题上花了太多时间,所以我会继续前进,希望这里有人可以指出我做得很差。

谢谢!

2 个答案:

答案 0 :(得分:1)

您是否考虑过为此设置Cookie?我认为你最好不要与用户一起存储数据,因此每次返回他们的cookie数据时,都可以搜索你定义的变量。

if ( $this->input->post('rememberMe') )   
{   
    $this->input->set_cookie($name, $value, $expire, $domain, $path, $prefix, $secure);
}  

如果您不想使用变量,则可以使用信息传递数组。完成后,选择cookie的名称并在$ value中设置Username,或者设置你想要的任何名称,然后在登录页面的控制器中查找cookie:

if($this->input->get_cookie('cookie_name'))
{
   //set the username and password for your form
}
else
{
  //No cookie was found. Don't set anything.
}

我今天早上没有时间来测试它,但它应该适合你。

答案 1 :(得分:0)

这样做:

// Change the config setting
$this->config->set_item('sess_expiration',0);

// Force the Session class to recapture global settings by calling it's constructor
$this->session->CI_Session()