CodeIgniter3登录后执行系列函数触发Too Many Redirects错误求助
问题分析与解决方案
你遇到的"Too Many Redirects"错误,核心是对CodeIgniter控制器的工作逻辑理解有误,下面拆解问题并给出修复方案:
核心错误点
1. 错误的控制器方法调用逻辑
CodeIgniter的控制器方法是对应独立路由的(比如/home/create对应Home控制器的create方法),你不应该在index方法里直接调用$this->create()、$this->edit($customer_id)这类方法。这种强行把多个方法逻辑塞进同一个请求的操作,会打乱框架的路由机制,若这些方法内部也有登录验证,就会触发循环重定向。
2. 未定义变量触发连锁错误
你在index里调用$this->edit($customer_id)、$this->update($customer_id)时,$customer_id变量完全没有定义,这会触发PHP未定义变量错误。如果你的框架错误处理配置为重定向操作,就会和登录验证的重定向形成无限循环。
3. 权限验证的位置不合理
你只在index方法里做了登录验证,但create、edit等核心操作方法没有验证,既达不到"仅登录用户可操作"的目的,还间接加剧了重定向循环的问题。
正确的实现方式
把登录验证放到控制器的构造函数里,让所有方法自动继承验证逻辑,同时每个方法保持独立,对应各自的路由:
class Home extends CI_Controller { public function __construct() { parent::__construct(); // 所有Home控制器的方法都强制验证登录状态 if (!$this->session->userdata('is_logged_in')) { redirect('Signin/signin'); } } public function index() { // 首页默认展示客户列表 $this->customers(); } public function customers(){ // 客户列表逻辑:获取数据、加载视图等 $data['customers'] = $this->customer_model->get_all_customers(); $this->load->view('customers/list', $data); } public function create(){ // 展示添加客户表单或处理表单提交逻辑 } public function save(){ // 保存新客户的业务逻辑 } public function edit($customer_id){ // 编辑客户逻辑:$customer_id从路由参数获取(比如/home/edit/12) if (!$customer_id) { redirect('home/customers'); } $data['customer'] = $this->customer_model->get_customer($customer_id); $this->load->view('customers/edit', $data); } public function update($customer_id){ // 更新客户信息的逻辑 } public function delete($customer_id){ // 删除客户的逻辑 } }
重定向循环的原因解释
当你在index里直接调用其他方法时,会出现这样的循环:
- 用户访问
/home进入index方法 - 调用
$this->create()后,若方法内的验证触发重定向(或未定义变量触发错误重定向),会跳转到Signin/signin - 登录成功后若重定向回
/home,又会重复进入index调用create(),再次触发重定向,形成无限循环。
通过构造函数统一做登录验证,每个方法独立处理对应路由的请求,既能保证所有操作都需要登录权限,也彻底避免了重定向循环问题。
内容的提问来源于stack exchange,提问作者Razvan Zamfir
相关产品推荐
相关产品推荐

