使用 tp3.2.3 框架时报错重定向次数过多

项目运行时出现重定向次数过多的错误,清除cookie无效。问题源于登录访问控制逻辑,特定控制器继承了包含验证的基类,导致无限重定向。在登录界面控制器中,误继承了验证控制器,造成循环验证。修复方法是检查并修改登录方法控制器的继承关系,避免此类错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天打开项目一访问就报错:重定向次数过多,真尴尬,昨晚还好好的!尴尬


清除 cookie 也是无法解决,于是感觉只能是代码逻辑的问题了。

我主要是要做登录的访问控制,访问某个控制器的某个方法时,没登录的话就拒绝访问,直接跳回登录界面。

代码控制单独写在一个控制器 ValidateController.class.php 文件内,该控制器继承基类控制器Controller,然后其他需要做访问控制

的控制器只需继承它就行。

<?php
namespace Admin\Controller;
use Think\Controller;
header('Content-Type:text/html;charset=utf-8;');
class ValidateController extends Controller
{
    public function __Construct(){
        parent::__Construct();//调用父类的构造函数.
        if(empty(session('id'))){//判断是否有登录信息决定其是否能访问
           redirect(U('Admin/login'));
        }
    }
}

结果本来是很正常的,今天突然就报错了,重定向次数过多,只能检查代码逻辑了,最后终于发现了我在登陆界面方法文件所在控

制器也继承了 ValidateController ,结果导致访问此方法,它自己也要跑去验证,结果没 session['id'] 又跳回此方法,来回往返跳个

不停,真尴尬!!尴尬

<?php
namespace Admin\Controller;
header('Content-Type:text/html;charset=utf-8;');
class AdminController extends ValidateController
{
    //登录
    public function login(){
        if(IS_POST){
            //show_bug($_POST);
            $model = D('Admin');
            if($model->validate($model->_loginValidate)->create(I('post.'),9)){
               if($model->login()){
                  redirect(U('Index/index'));
                  exit;
               }
            }
            $this->error($model->getError(),U('Admin/login'));
        }else{
            $this->display();
        }  
    }
其实这个控制器方法肯定是不能继承验证的控制器的,不然只能访问此 login 方法时先去验证不通过后又返回此方法,如此反复,导致重定向次数过多。。。

只需修改前几句代码即可


以后再碰到这种问题,直接跑到登录方法所在控制器查看逻辑即可,主要看其是否也继承了验证访问权限的控制器。(当然这是原因之一)。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值