Php Codeigniter 3身份验证:can';t echo来自会话的变量

Php Codeigniter 3身份验证:can';t echo来自会话的变量,php,codeigniter,session,Php,Codeigniter,Session,我正在开发Codeigniter 3身份验证应用程序。我不熟悉CI,因此遇到了这个基本问题:无法存储/输出会话中的变量(我需要his显示登录用户的数据) 用户模型: class Usermodel extends CI_Model { public function user_login($email, $password) { $query = $this->db->get_where('users', array('email' =>

我正在开发Codeigniter 3身份验证应用程序。我不熟悉CI,因此遇到了这个基本问题:无法存储/输出会话中的变量(我需要his显示登录用户的数据)

用户模型

class Usermodel extends CI_Model {
    public function user_login($email, $password)
    {
            $query = $this->db->get_where('users', array('email' => $email, 'password' => $password));
            return $query->row();
    }
} 
登录控制器如下所示:

class Signin extends CI_Controller {

  public function __construct()
  {
      parent::__construct();
  }

  public function index()
  {
      $this->load->view('signin');
  }

  public function signin()
  {  
      $this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email');
      $this->form_validation->set_rules('password', 'Password', 'required');
      $this->form_validation->set_error_delimiters('<p class="error">', '</p>');
      if ($this->form_validation->run())
      {
            $email = $this->input->post('email');
            $password = $this->input->post('password');
          $this->load->model('Usermodel');
          $current_user = $this->Usermodel->user_login($email, $password);
          if ($current_user) {
              $current_user_id = $this->session->set_userdata('user_id', $current_user->id);
              $current_user_email = $this->session->set_userdata('email', $current_user->email);
              // Echo from database
              echo $current_user->id . " | " . $current_user->email;

              //Echo from session
              echo $current_user_id . " | " . $current_user_email;
          } else {
            redirect('signin'); 
          }
      }
      else
      {
        $this->load->view('signin');
      }
  }
}
类签名扩展CI_控制器{
公共函数构造()
{
父项::_构造();
}
公共职能指数()
{
$this->load->view('signin');
}
公共功能符号
{  
$this->form_validation->set_规则('email'、'email'、'required | trim | valid_email');
$this->form_validation->set_规则('password'、'password'、'required');
$this->form\u validation->set\u error\u分隔符(“

”,“

”); 如果($this->form\u validation->run()) { $email=$this->input->post('email'); $password=$this->input->post('password'); $this->load->model('Usermodel'); $current\u user=$this->Usermodel->user\u login($email,$password); if($当前用户){ $current\u user\u id=$this->session->set\u userdata('user\u id',$current\u user->id); $current\u user\u email=$this->session->set\u userdata('email',$current\u user->email); //来自数据库的回音 echo$current_user->id.“|”。$current_user->email; //来自会话的回音 echo$current_user_id.“|”。$current_user_email; }否则{ 重定向(“登录”); } } 其他的 { $this->load->view('signin'); } } }
我能够在控制器中,通过这一行
echo$current\u user->id,从数据库中打印出登录用户id和电子邮件地址。" | " . $当前用户->电子邮件。浏览器显示:
1 | razvan_zamfir80@yahoo.com

但我不能从会话中执行相同的操作:
echo$current\u user\u id。" | " . $当前用户电子邮件不输出任何内容

我的错在哪里?谢谢大家!

好的,我知道了(来自CI用户指南):

而不是

$current_user_id = $this->session->set_userdata('user_id', $current_user->id);
$current_user_email = $this->session->set_userdata('email', $current_user->email);
你必须使用

$user_data = $this->session->userdata('user_id');
因为(
void

不返回任何内容

  • void
    -函数不向其调用者提供结果值
参考:


我也遇到过这样的问题,但我建议您使用现有的库,如tank auth、ion auth或其他任何库。这将节省您在项目上的时间,除非您是出于学习目的而这样做。

一旦设置了会话数据,会话数据将不可用。它在下一个重定向中可用。如果要检查会话是否存在,请设置会话,然后重定向到另一个控制器并检查其中的会话变量


课程不应该像你在上面尝试的那样工作。你能告诉我们你为什么这么做吗

这里解释了获取会话数据和设置我已经尝试了Ion auth。但是我没有找到任何关于如何使用它的有用教程。gogout函数呢?如何在CI3中销毁会话?@RazvanZamfir:
$this->session->sess_destroy()1
set\u userdata
不返回任何内容,因此根据其返回值设置变量是毫无意义的。2.您设置的变量(
$current\u user\u id
$current\u user\u email
)无论如何都不会被使用,因为您会立即
重定向
。3.在Codeigniter 3中,建议将会话数据直接设置到
$\u会话
超级全局,即
$\u会话['user\u id']=$current\u user->id
$user_data = $this->session->userdata('user_id');
$this->session->set_userdata(...)
/**
 * Set userdata
 *
 * Legacy CI_Session compatibility method
 *
 * @param   mixed   $data   Session data key or an associative array
 * @param   mixed   $value  Value to store
 * @return  void
 */
public function set_userdata($data, $value = NULL){

}