[英]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.