ホームページ >バックエンド開発 >PHPチュートリアル >tp フレームワークは、ログイン後にアドレスを入力してバックグラウンドに入るのを防ぎます

tp フレームワークは、ログイン後にアドレスを入力してバックグラウンドに入るのを防ぎます

不言
不言オリジナル
2018-05-16 16:35:243379ブラウズ

<?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();         
}
}

ログインできない場合はどう判断すればよいですか?アドレス バーにアドレスを入力して、ページまたはバックエンド システムを自由に選択できます

In Index コントローラーの __initialize メソッドで、セッションに値が割り当てられているかどうかを確認します。ログインするためのジャンプはありません。
具体的な参考情報
TPフレームワークの__initializeメソッド

バックグラウンドに他人が入るのを望まない、つまりログインページに入ることを許可されていないように見えますよね?アクセス可能なモジュールを設定してみて、その人がログインしているかどうかを判断したい場合は、いくつかの情報を提供しますので、それを試してみてください。モジュール

    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 は基本クラス (
) を書くことができ、検証が必要なすべてのコントローラーはこの基本クラスを継承する必要があります。

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

たとえば、バックグラウンドに管理者コントローラーがあります

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

これは TP のアプローチですが、symfony のようなフレームワークにはhttp 検証、アクセストークン検証、およびカスタマイズを簡単に実行できる独自の検証クラス 検証メソッド
BaseController ログイン ページへのアクセスを許可しないことは不可能です。そうしないと、ビジネス スタッフがログインできなくなります。フロントエンドとバックエンドが同じユーザー システムである場合は、フロントエンドのログイン ユーザーにバックエンドに入る権限があるかどうかを確認します。ログインせずに通常どおりログイン ページを表示します。検索エンジンにバックエンドのログイン アドレスを取得させないでください

ログインしているかどうかを判断するためのパブリック関数を作成します

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

次に、それをバックグラウンド コントローラーの __initialize メソッドに記述します

if(!isLogin()){
    $this->redirect(&#39;/login&#39;) //重定向到登录页
}
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。