簡體   English   中英

Codeigniter 3身份驗證:無法從會話中回顯變量

[英]Codeigniter 3 authentication: can't echo variable from session

我正在開發Codeigniter 3身份驗證應用程序 我是CI的新手,所以遇到了一個基本問題:無法從會話中存儲/輸出變量(我需要他顯示已登錄用戶的數據 )。

用戶模型

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

我能夠在控制器中通過echo $current_user->id . " | " . $current_user->email;這一行從數據庫中打印登錄的用戶ID和電子郵件地址echo $current_user->id . " | " . $current_user->email; echo $current_user->id . " | " . $current_user->email; 瀏覽器顯示: 1 | razvan_zamfir80@yahoo.com 1 | razvan_zamfir80@yahoo.com

但是我不能在會話中做同樣的事情: echo $current_user_id . " | " . $current_user_email; echo $current_user_id . " | " . $current_user_email; 什么都不輸出。

我的錯誤在哪里? 謝謝!

好的,我明白了(來自CI用戶指南):

$current_user_id = $this->session->userdata('user_id', $current_user->id);
$current_user_email = $this->session->userdata('email', $current_user->email);

代替

$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

$this->session->set_userdata(...)

不返回任何內容。

  • void函數不向其調用方提供結果值。

參考: https : //github.com/bcit-ci/CodeIgniter/blob/develop/system/libraries/Session/Session.php#L768

/**
 * 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){

}

我也遇到過此類問題,但是我建議您使用現有的庫,例如tank-auth或ion-auth或任何其他庫,除非您出於學習目的而這樣做,否則可以節省您的項目時間。

設置后,會話數據將不可用。 在下一個重定向中可用。 如果要檢查會話是否存在,請設置會話,然后重定向到另一個控制器並檢查那里的會話變量。

會話的工作方式並不像您上面所嘗試的那樣。您是否可以告訴我們您為什么這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM