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

CodeIgniter实现登录校验时出现ERR_TOO_MANY_REDIRECTS错误求助

解决CodeIgniter后台登录校验的ERR_TOO_MANY_REDIRECTS问题

咱们先搞清楚为啥会出现这个无限重定向的问题:你用的post_controller_constructor钩子会在所有控制器初始化完成后自动执行——包括你用来登录的admin/login控制器。当用户没登录时,钩子会跳转到admin/login页面,但这个页面加载时又会触发钩子,再次检查登录状态(这时候还是未登录),于是又跳转,就形成了死循环。

直接有效的修复方案

修改application/hooks/authenticate_login.php里的checkAdminLogin函数,给它加个“白名单”,让登录相关的页面跳过校验:

function checkAdminLogin() {
    $CI = & get_instance();
    
    // 获取当前访问的控制器和方法
    $currentController = $CI->router->fetch_class();
    $currentMethod = $CI->router->fetch_method();
    
    // 定义不需要校验的控制器和方法(根据你的实际情况调整)
    $excludedRoutes = [
        'admin' => ['login', 'do_login'] // 假设login是登录页面,do_login是登录提交接口
    ];
    
    // 如果当前访问的是白名单里的页面,直接跳过校验
    if (isset($excludedRoutes[$currentController]) && in_array($currentMethod, $excludedRoutes[$currentController])) {
        return;
    }
    
    // 正常校验登录状态
    if (!getSession('is_logged_in')) {
        redirect('admin/login');
    }
}

function getSession($key) {
    $CI = & get_instance();
    return $CI->session->userdata(trim($key));
}

额外的排查点

除了上面的核心修复,还要检查这两个地方避免复发:

  • Session配置是否正常:打开application/config/config.php,确认$config['sess_driver'](比如用files的话)和$config['sess_save_path']配置正确,并且对应的session存储目录(比如application/session)有读写权限。如果session无法正常保存,is_logged_in会一直是false,照样会触发循环。
  • 登录成功后是否正确设置Session:在admin控制器的登录验证方法里,确保登录成功后执行了这段代码:
    $this->session->set_userdata('is_logged_in', true);
    

内容的提问来源于stack exchange,提问作者Mohasinali Nodoliya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:47:34