【问题标题】:Codeigniter - storing database results in sessionCodeigniter - 在会话中存储数据库结果
【发布时间】:2011-03-01 00:05:38
【问题描述】:

嘿,我想在登录时存储一些来自数据库查询的会话信息, 但由于某种原因,它不允许我设置会话用户数据!?!

谁能解释为什么?

控制器:

function validate_login(){
$this->load->library('form_validation');
$this->form_validation->set_rules('email_address', "Email address","required|valid_email");
$this->form_validation->set_rules('password', "Password", "trim|required|min_length[6]|max_length[32]");

if($this->form_validation->run() == FALSE){

  $this->login();

} else {

  $email_address = $this->input->post('email_address');
  $password = md5($this->input->post('password'));
  $prev_page = $this->input->post('referrer');

  $found_user = $this->account_model->validate_user($email_address, $password); // calls to function of the same name in the model, returns array.

  if($found_user){

    $session_data = array(
      'user_id' => $found_user->user_id,
      'is_logged_in' => TRUE
    );

    // Debug code

      if($this->session->set_userdata($session_data)){
        echo "success session";
        } else {
        echo "failure session";
      }

  } else {
    //Debug code
    echo 'no user found';
  }
}
}

型号:

  function validate_user($email_address, $password){

$this->db->where('email_address', $email_address);
$this->db->where('password', $password);
$query = $this->db->get('user');

if($query->num_rows() == 1){

   foreach($query->result() as $row){
        $data = $row;
      }
      return $data;

} else {
    return FALSE;
}

}

【问题讨论】:

  • 错误是什么? “会话失败”或“未找到用户”?
  • 您并不是每个人都在会话中保存任何内容...
  • 对不起,错误是“失败会话”
  • @seth - $this->session->set_userdata($session_data) 保存到会话中,包含在此处用于调试的 if 语句中,如果为 true,它将回显“成功会话”;
  • 每当我 print_r($session_data) 我得到我期望的数组(['user_id'] => 2, ['is_logged_in'] => 1)

标签: php database session codeigniter login


【解决方案1】:

我将此作为另一个答案发布,以便我可以粘贴此代码 sn-p。我认为一切正常。 set_userdata 函数返回 void,因此不需要将其封装在 if 语句中。

而不是下面的代码:

if($this->session->set_userdata($session_data)){
    echo "success session";
    } else {
    echo "failure session";
  }

应该是:

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

您可以使用此功能在会话中添加新数据或更改现有数据;里面有没有数据也没关系。

另一个答案:

您正在加载会话库吗?作为一个常用的库,我建议将其加载到自动加载配置文件中,如下所示:

$autoload['libraries'] = array('session', 'other libraries etc');

【讨论】:

  • 感谢 Christian 提供的额外信息,我不知道它返回 void 我认为由于某种原因它是真还是假,因此我的失败消息。
  • 我也不确定,文档中也没有说明,所以我只是在会话库中挖掘,发现它没有返回任何内容:)跨度>
【解决方案2】:

解决了!!

好吧,它现在似乎可以工作了,我认为问题可能是试图设置已经设置的 set_userdata!

虽然我不知道如果我正在更新或添加到那里的数据,为什么它会返回 FALSE。 我确保所有会话数据都被销毁并删除了条件,现在似乎有一个持久会话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    • 2011-10-29
    • 1970-01-01
    • 2015-06-19
    • 1970-01-01
    • 2011-07-14
    相关资源
    最近更新 更多