使用 tp3.2.3 框架時報錯重定向次數過多
阿新 • • 發佈:2019-01-26
今天開啟專案一訪問就報錯:重定向次數過多,真尷尬,昨晚還好好的!
清除 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'] 又跳回此方法,來回往返跳個
不停,真尷尬!!
其實這個控制器方法肯定是不能繼承驗證的控制器的,不然只能訪問此 login 方法時先去驗證不通過後又返回此方法,如此反覆,導致重定向次數過多。。。<?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(); } }
只需修改前幾句程式碼即可
以後再碰到這種問題,直接跑到登入方法所在控制器檢視邏輯即可,主要看其是否也繼承了驗證訪問許可權的控制器。(當然這是原因之一)。