codeigniter设置会话错误

时间:2013-02-22 12:52:00

标签: php mysql codeigniter session

我正在尝试在验证用户的所有凭据时从控制器设置codeigniter中的会话。我在登录控制器的方法中有这个代码。方法'login_check'由form_validation的set rules方法调用为回调函数。我尝试了一切可能的方法,但出于某种原因,根据CI的手册,我无法设置应该是直接任务的会话

注意:会话在autoload.php中自动加载

    $this->form_validation->set_rules('password', 'password', 'trim|required|callback_login_check');


public function login_check($password) {
    $this->load->library('session');
    //Field validation succeeded.  Validate against database
    $username = $this->input->post('username');
    $this->load->model('industry_person');

    //query the database
    $query = $this->industry_person->check_login($username, $password);

    if (!$query) {
        $this->form_validation->set_message('login_check', 'Invalid username or password');
        return false;
        $this->index();
    } else {
        $data = array(
            'username' => $username,
            'is_logged_in' => true
        );
        if (!$this->session->set_userdata('logged_in', $data))
            echo "error setting session";

    }
}

当我输入正确的凭据并且它们在数据库中匹配时,我会收到输出为“错误设置会话”。

4 个答案:

答案 0 :(得分:2)

$data删除单引号。它是一个数组变量。试试这个,

if (!$this->session->set_userdata('logged_in', $data))
            echo "error setting session";

答案 1 :(得分:1)

因为$data是一个数组..试一试

if (!$this->session->set_userdata('logged_in', $data))
            echo "error setting session";

答案 2 :(得分:0)

当我更改config.php文件中的加密密钥时,我设法使其工作。在涉及“_”之前的加密密钥和新的加密密钥只有字母字符。

答案 3 :(得分:0)

在codeigniter中使用session基于数组,要在控制器构造函数中手动初始化Session类,请使用$ this-> load->库函数:

$this->load->library('session');

会话数组的一个有用方面是您可以将自己的数据添加到它,它将存储在用户的cookie中。你为什么想做这个?这是一个例子:

假设某位特定用户登录您的网站。经过身份验证后,您可以将他们的用户名和电子邮件地址添加到会话cookie中,使您可以全局使用这些数据,而无需在需要时运行数据库查询。

要将数据添加到会话数组,需要将包含新数据的数组传递给此函数

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

其中$ array是包含新数据的关联数组。这是一个例子:

$newdata = array(
                   'username'  => 'johndoe',
                   'email'     => 'johndoe@some-site.com',
                   'logged_in' => TRUE
               );

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

使用以下函数可以获得会话数组中的任何信息:

$this->session->userdata('item');

例如:

if(!$this->session->userdata('logged_in')) {
    //do what you wanna do
}