【问题标题】:codeiginiter setting a session errorcodeigniter 设置会话错误
【发布时间】:2013-02-08 02:26:18
【问题描述】:

当用户的所有凭据都得到验证时,我正在尝试在控制器的 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";

    }
}

当我输入正确的凭据并且它们在数据库中匹配时,我会收到输出为“error setting session”。

【问题讨论】:

  • 你设置了一个加密密钥,对吧?
  • if (!$this->session->set_userdata('logged_in', '$data')) $data 有引号 - 而且不应该 - 它是一个保存数组的变量。 set_userdata 也只接受数组,而不是你传递的字符串“logged_in”。
  • 是的,我已经设置了加密密钥

标签: php mysql codeigniter session


【解决方案1】:

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

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

【讨论】:

  • 是的,您将数据作为字符串而不是数组传递。
  • 抱歉,它已经被删除了,但是当我在 stackoverflow 上编辑它时,我忘了删除单引号。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      在 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
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-22
        • 1970-01-01
        • 1970-01-01
        • 2016-10-14
        • 2012-10-07
        相关资源
        最近更新 更多