首頁  >  文章  >  後端開發  >  tp框架防止登陸後敲擊地址進入後台

tp框架防止登陸後敲擊地址進入後台

不言
不言原創
2018-05-16 16:35:243303瀏覽

<?php
namespace AdminController;
use ThinkController;
class IndexController extends Controller {
public function index(){
    $this->display();
}

public function login(){
    $username = I(&#39;username&#39;);
    $password = I(&#39;password&#39;);

    $user = D(&#39;User&#39;);
    $res = $user->where(array(&#39;username&#39;=>$username))->find();
    // dump($res);die;
    if(!$res || md5($password) != $res[&#39;password&#39;]){
        $this->error(&#39;用户名或密码错误&#39;);
    }else{
        session(&#39;username&#39;,$res[&#39;username&#39;]);
        session(&#39;id&#39;,$res[&#39;id&#39;]);
        session(&#39;create_time&#39;,$res[&#39;create_time&#39;]);
        //dump(session());die;    
        $this->redirect(&#39;/Admin/Main/index&#39;); //跳转到后台管理                
    }
}
//清空
public function loginout(){
    session(null); 
    //dump(session());
    $this->redirect(&#39;/Admin/Index/index&#39;);
}
}


<?php        
//后台页面的控制器
namespace AdminController;
use ThinkController;
class MainController extends Controller {
public function index(){            
$this->display();         
}
}

應該怎麼判斷,在地址列敲地址不能隨意進入登陸頁或後台系統

回复內容:

<?php
namespace AdminController;
use ThinkController;
class IndexController extends Controller {
public function index(){
   $this->display();
}

public function login(){
   $username = I(&#39;username&#39;);
   $password = I(&#39;password&#39;);

   $user = D(&#39;User&#39;);
   $res = $user->where(array(&#39;username&#39;=>$username))->find();
   // dump($res);die;
   if(!$res || md5($password) != $res[&#39;password&#39;]){
       $this->error(&#39;用户名或密码错误&#39;);
   }else{
       session(&#39;username&#39;,$res[&#39;username&#39;]);
       session(&#39;id&#39;,$res[&#39;id&#39;]);
       session(&#39;create_time&#39;,$res[&#39;create_time&#39;]);
       //dump(session());die;    
       $this->redirect(&#39;/Admin/Main/index&#39;); //跳转到后台管理                
   }
}
//清空
public function loginout(){
   session(null); 
   //dump(session());
   $this->redirect(&#39;/Admin/Index/index&#39;);
}
}
<?php        //后台页面的控制器
namespace AdminController;
use ThinkController;
class MainController extends Controller {
public function index(){    
       $this->display();         
}
}

應該怎麼判斷,在地址列敲地址不能隨意進入登陸頁或後台系統

在Index控制器的__initialize方法中,判斷你的session有沒有被賦值。沒有跳到登入。
具體參考
TP框架__initialize方法

看你的意思應該是不想讓別人進入後台 也就是登陸頁都不讓進去吧?如果是可以試試設定可以存取的模組 如果想判斷這個人登陸沒登陸那就是判斷session了

給你點資料你試試如果可以你就部署到伺服器的設定下本地就不要設定了
 禁止訪問模組

    3.2对模块的访问是自动判断的,所以通常情况下无需配置模块列表即可访问,但可以配置禁止访问的模块列表(用于被其他模块调用或者不开放访问),默认配置中是禁止访问Common模块和Runtime模块(Runtime目录是默认的运行时目录),我们可以增加其他的禁止访问模块列表:

        // 设置禁止访问的模块列表
        'MODULE_DENY_LIST' => array('Common','Runtime','Api'),

    设置后,Api模块不能通过URL直接访问,事实上,可能我们只是在该模块下面放置一些公共的接口文件,因此都是内部调用即可。
    设置访问列表

    如果你的应用下面模块比较少,还可以设置允许访问列表和默认模块,这样可以简化默认模块的URL访问。

        ***'MODULE_ALLOW_LIST' => array('Home','Admin','User'),***
        'DEFAULT_MODULE' => 'Home',

    设置之后,除了Home、Admin和User模块之外的模块都不能被直接访问,并且Home模块是默认访问模块(可以不出现在URL地址)。

登入頁都不讓進,後台系統怎麼登入呢

其實是判斷有無驗證的問題.
TP可以寫一個基類(BaseController), 然後所有需要驗證的控制器, 都應該繼承這個基類.

isAuth()) {
            $this->redirectToLogin();
        }
    }
    
    private function isAuth()
    {
        //验证是否登录
    }
    
    private function redirectToLogin()
    {
        //跳转到登录页面
    }
}

例如, 後台有一個管理員控制器

class AdminController extends BaseController
{
    public function __construct()
    {
        parent::__construct();
    }
}

這是TP的做法, 但是像symfony這樣的框架, 自帶了驗證類, 可以很方便地進行http驗證, accesstoken驗證和自訂驗證方式.

登入頁不讓進是不可能的,否則你的業務人員都登不上去。如果你的前後台是同一套使用者係統,那就驗證前台登入使用者是否有進入背景的權限,沒登入就正常顯示登入頁就好了,只要別讓搜尋引擎把你的後台登入位址抓過去就行

寫個公用函數判斷是否為登入狀態

function isLogin(){
    if(I(&#39;session.uid&#39;)){
        return true;
    }else{
        return false;   
    }
}

然後在後台控制器的__initialize方法裡寫

if(!isLogin()){
    $this->redirect(&#39;/login&#39;) //重定向到登录页
}
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn