You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:07:34