Php Codeigniter-在会话中存储数据库结果

Php Codeigniter-在会话中存储数据库结果,php,database,session,codeigniter,login,Php,Database,Session,Codeigniter,Login,嘿,我想在登录时存储数据库查询中的一些会话信息, 但由于某些原因,它不允许我设置会话userdata 有人能解释一下原因吗 控制器: function validate_login(){ $this->load->library('form_validation'); $this->form_validation->set_rules('email_address', "Email address","required|valid_email"); $this->f

嘿,我想在登录时存储数据库查询中的一些会话信息, 但由于某些原因,它不允许我设置会话userdata

有人能解释一下原因吗

控制器:

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

已解决

好吧,它现在似乎正在工作,我想问题可能是试图设置已设置的用户数据

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

已解决

好吧,它现在似乎正在工作,我想问题可能是试图设置已设置的用户数据

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

我将此作为另一个答案发布,以便粘贴此代码段。我认为一切都正常运转。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');

我将此作为另一个答案发布,以便粘贴此代码段。我认为一切都正常运转。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');

什么是错误?”“会话失败”或“未找到用户”?您并非每次都将任何内容保存到会话中…抱歉,错误是“会话失败”@seth-$this->session->set_userdata($session_data)保存到会话中,包含在此处的if语句中,用于调试,如果为true,则会回显“成功会话”;每当我打印r($session\u data)时,我都会得到我想要的数组(['user\u id']=>2,['is\u logged\u']=>1)错误是什么“会话失败”或“未找到用户”?您并非每次都将任何内容保存到会话中…抱歉,错误是“会话失败”@seth-$this->session->set_userdata($session_data)保存到会话中,包含在此处的if语句中,用于调试,如果为true,则会回显“成功会话”;每当我打印r($session_data)时,我都会得到我想要的数组(['user_id']=>2,['is_logged_']=>1)感谢Christian提供的额外信息,我不知道它返回了void,我认为它是真的还是假的,因此我收到了失败消息。我也不确定,文档中也没有提到它,所以我只是翻遍了会话库,发现它没有返回任何内容:)感谢Christian提供的额外信息,我不知道它返回了void,我想它是真的还是假的,这是我的失败消息。我也不确定,文档中也没有任何相关内容,所以我只是翻遍了会话库,发现它没有返回任何内容:)