CodeIgniter构造函数中Redirect失效,陷入无限循环问题求助
解决CodeIgniter User控制器构造函数无限重定向循环问题
这个问题的根源很明确:你在User控制器的构造函数里做了全局登录检查,但login方法本身也属于User控制器。每次尝试访问User/login时,都会先执行构造函数,构造函数发现用户未登录,又重定向到User/login,如此反复就形成了无限循环。而之前把login放在Welcome控制器没问题,是因为Welcome控制器的构造函数没有这个强制登录检查,跳过去后不会触发循环逻辑。
修复方案:在构造函数中排除login方法
我们只需要在构造函数里判断当前要执行的方法是不是login,如果是,就跳过登录检查和重定向。CodeIgniter可以通过$this->router->fetch_method()获取当前请求的方法名。
修改后的User控制器代码如下:
class User extends CI_Controller { function __construct() { parent::__construct(); // 获取当前请求的方法名 $current_method = $this->router->fetch_method(); // 排除login方法,只有非login方法才做登录检查 if ($current_method !== 'login' && !is_logged_in()) { redirect(base_url().'User/Login'); } } public function login(){ $this->load->view('loginpage'); } }
额外优化建议
- 你可以把
redirect里的URL简化成redirect('User/login'),CodeIgniter的redirect函数会自动结合base_url,不用手动拼接。 - 确保你的自定义助手已经在
application/config/autoload.php里配置了自动加载,或者在构造函数里手动加载$this->load->helper('你的助手文件名'),避免出现函数未定义的问题。
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

