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

CI框架本地测试首次登录失败,再次登录正常求助

问题分析与解决方案

看起来你遇到的是首次登录无响应、第二次正常的典型Session初始化问题,我帮你梳理下代码里的几个关键问题:

1. 核心问题:Session库未加载

你的Admin_login控制器构造函数里只加载了模型,但没有加载CodeIgniter的Session库和Form Validation库。虽然Form Validation可能会被自动调用,但Session库必须显式加载(或在自动加载配置中设置)。首次登录时,调用$this->session->set_userdata()或unset_userdata()时,Session还未初始化,会导致流程中断,看起来就是页面无反应;第二次操作时,Session可能已经被隐式初始化,所以能正常工作。

2. 次要问题:不必要的Session操作

在表单验证失败的分支里,你调用了$this->session->unset_userdata('logged_in');——此时用户还未登录,这个Session变量本来就不存在,而且如果Session未加载,这行代码会直接抛出错误,导致页面卡住。

3. 潜在问题:Session存储的用户ID格式错误

你的模型返回的是$result->row()(一个对象),但控制器里直接把整个对象存到user_id里,这会导致Session存储异常,后续校验登录状态时可能出问题。


修复后的代码示例

控制器修改(Admin_login.php)

<?php 
class Admin_login extends CI_Controller{ 
    public function __construct(){ 
        parent::__construct(); 
        // 必须加载Session和Form Validation库
        $this->load->library('session');
        $this->load->library('form_validation');
        $this->load->model('admin_model','secure_admin_model'); 
    } 

    public function login(){ 
        $this->form_validation->set_rules('username','Username','trim|required'); 
        $this->form_validation->set_rules('password','Password','trim|required'); 

        if($this->form_validation->run()==FALSE){ 
            $this->load->view('admin/layouts/admin_login'); 
            // 移除不必要的Session unset操作
        } else{ 
            $username=$this->input->post('username'); 
            $password=$this->input->post('password'); 

            $user=$this->secure_admin_model->login($username,$password); 
            if($user){ 
                // 存储用户ID字段(假设你的admin表主键是id,根据实际调整)
                $user_data=array( 
                    'user_id'=>$user->id, 
                    'username'=>$username, 
                    'logged_in'=>true 
                ); 
                $this->session->set_userdata($user_data); 
                $this->session->set_flashdata('pass_login','You are logged in'); 
                redirect('admin/dashboard'); 
            } else{ 
                $this->session->set_flashdata('wrong_pass','Wrong Username and password'); 
                redirect('admin/login'); 
            } 
        } 
    }
}

额外建议

  1. 全局自动加载Session:打开application/config/autoload.php,把Session加入自动加载列表,避免每个控制器都手动加载:
    $autoload['libraries'] = array('session');
    
  2. Dashboard页面的登录校验:确保你的admin/dashboard控制器有登录状态校验,比如:
    <?php
    class Admin extends CI_Controller{
        public function __construct(){
            parent::__construct();
            if(!$this->session->userdata('logged_in')){
                redirect('admin/login');
            }
        }
    
        public function dashboard(){
            $this->load->view('admin/dashboard');
        }
    }
    

内容的提问来源于stack exchange,提问作者karan loona

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:11:08