1. 程式人生 > >使用 tp3.2.3 框架時報錯重定向次數過多

使用 tp3.2.3 框架時報錯重定向次數過多

今天開啟專案一訪問就報錯:重定向次數過多,真尷尬,昨晚還好好的!尷尬


清除 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 方法時先去驗證不通過後又返回此方法,如此反覆,導致重定向次數過多。。。

只需修改前幾句程式碼即可


以後再碰到這種問題,直接跑到登入方法所在控制器檢視邏輯即可,主要看其是否也繼承了驗證訪問許可權的控制器。(當然這是原因之一)。