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
相关产品推荐
相关产品推荐

