0

当验证用户的所有凭据时,我试图在控制器的 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

4 回答 4

2

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

if (!$this->session->set_userdata('logged_in', $data))
            echo "error setting session";
于 2013-02-22T12:54:18.707 回答
1

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

if (!$this->session->set_userdata('logged_in', $data))
            echo "error setting session";
于 2013-02-22T12:56:57.717 回答
0

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

$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
}
于 2013-05-17T08:24:41.457 回答
0

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

于 2013-02-22T13:08:01.557 回答