我正在开发 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和电子邮件地址。浏览器显示:1 | razvan_zamfir80@yahoo.com
。
但是我不能在会话中做同样的事情:echo $current_user_id . " | " . $current_user_email;
什么都不输出。
我的错误在哪里?谢谢!
答案 0 :(得分: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);
答案 1 :(得分: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){
}
答案 2 :(得分:0)
我也遇到过这样的问题,但我建议你使用像tank-auth,ion-auth或其他任何其他的现有库,这样可以节省你在项目上的时间,除非你是为学习目的而做的。
答案 3 :(得分:0)
会话数据将无法使用。它可以在下一个重定向中使用。如果要检查会话是否存在,请设置会话,然后重定向到另一个控制器并检查那里的会话变量。
会话并不意味着像你上面的尝试一样工作。你要小心告诉我们你为什么这样做。