Php Codeigniter 3身份验证:can';t echo来自会话的变量
我正在开发Codeigniter 3身份验证应用程序。我不熟悉CI,因此遇到了这个基本问题:无法存储/输出会话中的变量(我需要his显示登录用户的数据) 用户模型: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' =>
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()代码>1set\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){
}