Heim > Backend-Entwicklung > PHP-Tutorial > Das tp-Framework verhindert die Eingabe des Hintergrunds durch Eingabe der Adresse nach dem Anmelden

Das tp-Framework verhindert die Eingabe des Hintergrunds durch Eingabe der Adresse nach dem Anmelden

不言
Freigeben: 2023-03-01 07:14:01
Original
3378 Leute haben es durchsucht

<?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;);
}
}
Nach dem Login kopieren

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

Wie sollen wir beurteilen? Sie können die Anmeldeseite oder das Backend-System nicht nach Belieben aufrufen, indem Sie die Adresse in die Adressleiste eingeben

Antwortinhalt:

<?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();         
}
}
Nach dem Login kopieren

Wie sollen wir beurteilen? Sie können die Anmeldeseite oder das Hintergrundsystem nicht nach Belieben aufrufen, indem Sie die Adresse in die Adressleiste eingeben.

Stellen Sie in der __initialize-Methode des Index-Controllers fest, ob Ihre Sitzung erfolgreich war einen Wert zugewiesen. Es gibt keinen Sprung zum Anmelden.
Zur spezifischen Referenz
TP-Framework __initialize-Methode

Es scheint, dass Sie nicht möchten, dass andere den Hintergrund betreten, das heißt, die Anmeldeseite darf nicht betreten werden, oder? Wenn Sie versuchen möchten, die zugänglichen Module zu konfigurieren, müssen Sie die Sitzung beurteilen.

Ich werde Ihnen einige Informationen geben und Sie können es versuchen Sie können es in den Servereinstellungen bereitstellen und nicht lokal festlegen.
Der Zugriff auf das Modul ist verboten.

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

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

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

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

        ***&#39;MODULE_ALLOW_LIST&#39; => array(&#39;Home&#39;,&#39;Admin&#39;,&#39;User&#39;),***
        &#39;DEFAULT_MODULE&#39; => &#39;Home&#39;,

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

Die Anmeldeseite darf nicht aufgerufen werden, um sich am Backend anzumelden System?

Tatsächlich geht es darum, zu beurteilen, ob eine Überprüfung vorliegt.
TP kann eine Basisklasse (BaseController) schreiben, und dann sollten alle Controller, die überprüft werden müssen, diese Basis erben Klasse.

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

Zum Beispiel gibt es einen Administrator-Controller im Hintergrund

class AdminController extends BaseController
{
    public function __construct()
    {
        parent::__construct();
    }
}
Nach dem Login kopieren

Dies ist, was TP tut, aber Frameworks wie Symfony verfügen über eigene Verifizierungsklassen, die dies können Führen Sie problemlos eine HTTP-Überprüfung, eine Zugriffstoken-Überprüfung und benutzerdefinierte Überprüfungsmethoden durch.

Es ist unmöglich, den Zugriff auf die Anmeldeseite nicht zuzulassen, da sich sonst keiner Ihrer Geschäftsmitarbeiter anmelden kann. Wenn Ihr Front-End und Ihr Back-End dasselbe Benutzersystem sind, überprüfen Sie, ob der Front-End-Anmeldebenutzer die Berechtigung hat, das Back-End aufzurufen. Zeigen Sie einfach die Anmeldeseite normal an, ohne sich anzumelden. Solange die Suchmaschine vorhanden ist lässt nicht zu, dass die Suchmaschine Ihre Back-End-Anmeldeadresse abgreift

Schreiben Sie eine öffentliche Funktion, um festzustellen, ob angemeldet ist

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

Dann schreiben Sie

if(!isLogin()){
    $this->redirect(&#39;/login&#39;) //重定向到登录页
}
Nach dem Login kopieren
in die __initialize Methode des Hintergrundcontrollers

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage