>백엔드 개발 >PHP 튜토리얼 >tp 프레임워크는 로그인 후 주소를 입력하여 백그라운드로 진입하는 것을 방지합니다.

tp 프레임워크는 로그인 후 주소를 입력하여 백그라운드로 진입하는 것을 방지합니다.

不言
不言원래의
2018-05-16 16:35:243380검색

<?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 메소드에서 세션이 종료되었는지 확인합니다. 값을 할당했습니다. 로그인으로 점프가 없습니다.
구체적인 참고사항
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는 기본 클래스(BaseController)를 작성할 수 있으며, 검증이 필요한 모든 컨트롤러는 이 기본 클래스를 상속해야 합니다.

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

예를 들어 백그라운드에 관리자 컨트롤러가 있는 경우

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

TP가 하는 일인데 Symfony 같은 프레임워크에는 자체 검증 클래스가 있어서 http를 쉽게 수행할 수 있습니다. 인증, 액세스 토큰 인증 및 사용자 정의 인증 방법

로그인 페이지에 대한 액세스를 허용하지 않는 것은 불가능합니다. 그렇지 않으면 비즈니스 직원 중 누구도 로그인할 수 없습니다. 프런트엔드와 백엔드가 동일한 사용자 시스템인 경우 프런트엔드 로그인 사용자에게 백엔드에 들어갈 수 있는 권한이 있는지 확인하십시오. 로그인하지 않고 로그인 페이지를 정상적으로 표시하면 됩니다. 검색 엔진이 백엔드 로그인 주소를 가져오지 못하게 하세요

로그인되었는지 확인하는 공개 함수를 작성하세요

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

그런 다음 __initialize 메소드에

if(!isLogin()){
    $this->redirect(&#39;/login&#39;) //重定向到登录页
}
를 작성하세요. 배경 컨트롤러
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.