CodeIgniter登录后如何从Session中获取用户全部数据库数据?
实现登录后通过Session显示用户全部数据
没问题,我来帮你一步步搞定这个功能。你的现有login_model只做了登录成功与否的布尔判断,没有返回用户的具体数据,所以我们需要先调整模型逻辑,再在控制器里处理Session存储,最后在视图里展示数据。
步骤1:修改login_model,返回用户完整数据
把原模型的返回值从布尔值改成验证通过时返回用户的单行数据,失败时仍返回false:
<?php class login_model extends CI_model { function Can_login($email,$password) { $this->db->select('*'); $this->db->where('email',$email); $this->db->where('password',$password); $query = $this->db->get('registration'); if($query->num_rows() > 0) { // 返回对象格式的用户数据,想用数组就改成 row_array() return $query->row(); } else { return false; } } } ?>
步骤2:在控制器中处理登录并存储用户到Session
假设你有个Login控制器,在处理登录提交的方法里(比如process_login),调用模型验证后把用户数据存入Session:
<?php class Login extends CI_Controller { public function __construct() { parent::__construct(); // 如果没在autoload.php里自动加载Session,就手动加载 $this->load->library('session'); $this->load->model('login_model'); } public function process_login() { // 获取表单提交的账号密码 $email = $this->input->post('email'); $password = $this->input->post('password'); // 调用模型验证登录 $user_data = $this->login_model->Can_login($email, $password); if($user_data) { // 把用户数据存入Session,键名可以自己改 $this->session->set_userdata('logged_user', $user_data); // 登录成功跳转到用户主页 redirect('dashboard'); } else { // 登录失败,设置提示信息 $this->session->set_flashdata('login_error', '邮箱或密码不正确'); redirect('login'); } } } ?>
步骤3:在视图中读取Session并显示用户数据
比如在dashboard.php视图里,先判断用户是否登录,再展示数据:
<?php // 先检查用户是否已登录 if($this->session->userdata('logged_user')) { $user = $this->session->userdata('logged_user'); ?> <h2>欢迎回来,<?php echo $user->name; ?></h2> <div class="user-info"> <p>邮箱:<?php echo $user->email; ?></p> <p>注册时间:<?php echo $user->created_at; ?></p> <!-- 这里可以继续显示数据库里的其他用户字段 --> </div> <?php } else { // 未登录就跳回登录页 redirect('login'); } ?>
额外提示
- 建议在
config/autoload.php里配置自动加载Session,避免每次控制器都手动加载。 - 如果你的密码是明文存储的,赶紧改成加密存储(用
password_hash()和password_verify()),这是安全基本要求。 - Session的键名可以根据自己的习惯修改,只要控制器和视图保持一致就行。
内容的提问来源于stack exchange,提问作者Tanmay
相关产品推荐
相关产品推荐

