2017-10-07 62 views
1

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

用戶模式

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

我能在控制器,打印出用戶ID簽名和數據庫中的電子郵件地址爲echo $current_user->id . " | " . $current_user->email;。瀏覽器顯示:1 | [email protected]

但我不能在會議上做同樣的事情:echo $current_user_id . " | " . $current_user_email;什麼都不輸出。

我的錯誤在哪裏?謝謝!

+1

這裏解釋獲取會話數據https://www.codeigniter.com/user_guide/libraries/sessions.html#retrieving-session-data並設置https://www.codeigniter.com/user_guide/libraries/sessions.html #adding-session-data – user4419336

回答

1

好吧,我得到它(從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); 
+0

1.'set_userdata'不返回任何內容,所以從它的返回中設置一個變量是無稽之談。 2.你設置的變量('$ current_user_id'和'$ current_user_email')不會被使用,因爲你立即'重定向'。 3。在Codeigniter 3中,SET會話數據的推薦方式直接到'$ _SESSION'超級全局,即'$ _SESSION ['user_id'] = $ current_user-> id;' – DFriend

1

你必須使用

$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){ 

} 
+0

gogout函數怎麼樣?我如何銷燬CI3中的會話? –

+0

@RazvanZamfir:'$ this-> session-> sess_destroy();' –

0

我也遇到過這樣的問題,但我建議你使用像坦克權威性,或離子AUTH或任何其他現有的庫將節省您的時間對項目除非你是爲了學習目的而做的。

+0

我試過了Ion-auth。但我沒有找到任何有用的教程如何使用它。 –

+0

@RazvanZamfir:http://benedmunds.com/ion_auth/ – Vickel

0

會話數據一旦設置就無法使用。它在下一次重定向中可用。如果你想檢查會話是否存在,設置會話然後重定向到另一個控制器並檢查會話變量。

會話並不意味着您的工作方式如上所述。您可以告訴我們您爲什麼這麼做。