CodeIgniter会话异常排查:登录后member_area验证不通过
问题排查:CodeIgniter Session 登录后验证失效的原因
兄弟,我一眼就找到了你代码里的致命问题——变量拼写错误,这直接导致Session数据没有被正确设置,所以member_area方法里的条件判断才会失效!
核心错误点
在你的Welcome控制器的login方法中,你定义了存储用户登录状态的数组$session,但调用set_userdata方法时,却写错了变量名:
// 错误代码:变量名写成了$sesson(少了一个s) $this->session->set_userdata($sesson);
正确的写法应该是使用你定义好的$session变量:
$this->session->set_userdata($session);
因为变量名拼写错误,程序根本没有把is_logged_in这个关键的登录状态标识存入Session,所以当跳转到member_area方法时,$this->session->userdata('is_logged_in')返回NULL,条件判断不成立,自然就执行了else分支的die()。
修正后的Welcome控制器代码
class Welcome extends CI_Controller { function login() { $this->form_validation->set_rules('email', 'E-mail', 'valid_email'); $this->form_validation->set_rules('password', 'Password', 'min_length[5]|max_length[8]'); if ($this->form_validation->run() == FALSE) { $data['view'] = 'login_view'; $this->load->view('load_view',$data); } else { $email = $_POST['email']; $password = md5($_POST['password']); $this->load->model('Sample_model'); $credentials = array( 'email' => $_POST['email'], 'password' => md5($_POST['password']) ); $user = $this->Sample_model->check_user($credentials); if($user->num_rows() == 1) { $user = $user->row(); $session = array( 'name' => $user->name, 'is_logged_in' => TRUE ); // 修正变量名拼写错误 $this->session->set_userdata($session); redirect('welcome/member_area'); } else { $data['view'] = 'error_view'; $data['msg'] = 'Login failed'; $this->load->view('load_view',$data); } } } public function member_area() { if($this->session->userdata('is_logged_in')) { $data['view'] = 'memberarea_view'; $this->load->view('load_view',$data); } else { die('die'); } } }
额外排查建议(如果修正后仍有问题)
- 检查
config/config.php中的Session配置:确认$config['sess_driver']设置正确(比如files、database),如果使用files驱动,$config['sess_save_path']要指向服务器上可读写的目录 - 可以在
member_area方法中临时打印Session数据,方便调试:public function member_area() { var_dump($this->session->userdata()); // 临时打印Session内容 if($this->session->userdata('is_logged_in')) { $data['view'] = 'memberarea_view'; $this->load->view('load_view',$data); } else { die('die'); } }
内容的提问来源于stack exchange,提问作者Kumar Ajeet
相关产品推荐
相关产品推荐

