首页  >  问答  >  正文

php - TP5的登录验证问题

应该属于比较菜的一个问题,就是我在处理前后端的时候,需要判断是否存在session来确定用户是否登录。

但是我通过文档看到的办法只能自己在每个页面都引入一次判断,然后进行其他操作,不过肯定有更简单的办法来处理这个事,自己实在是研究不出来了,请大神帮忙!

主要就是如何能一次设置,然后让制定目录下的页面都判断是否登录,从而方便下一步的操作

巴扎黑巴扎黑2704 天前1113

全部回复(5)我来回复

  • 迷茫

    迷茫2017-05-25 15:10:19

    第一种引用访问:将所有session判断验证写在一个类里面。在每一个控制器里创建前置控制器方法或者初始化控制,在方法里面直接引用session类的登录验证方法。
    第二种继承:就是每个控制器都继承session验证类,这样每次访问控制器都继承session所有类与方法,在session类设置初始化控制,作为session的登录验证

    个人推荐第二种,因为不需要在每个控制器里面初始化控制器,减少代码便于维护

    回复
    0
  • 世界只因有你

    世界只因有你2017-05-25 15:10:19

    写一个基类如Base.php,通过其_initialize来实现,如:

    <?php
    namespace app\admin\controller;
    
    use think\Controller;
    
    class Base extends Controller{
        public function _initialize(){
            $uid = session('uid');
            if($uid == null){
                $this->rediect('Login/index','请先登录后操作');
            }
        }
    }

    其中Login.php不能继承Base.php,否则需要另外的特殊判断,如:

    <?php
    namespace app\admin\controller;
    
    use think\Controller;
    
    class Login extends Controller{
        public function _initialize(){
            $uid = session('uid');
            if($uid != null){
                $this->rediect('Index/index','已登录');
            }
        }
    }

    回复
    0
  • 迷茫

    迷茫2017-05-25 15:10:19

    我也是小白一枚,只是有个想法,可以在登录存储session之后,在后端写一个判断session的公共方法,然后在需要目录下面嗲用这个方法,这样就不需要在每个目录下面都去判断了!

    只是个人想法,没有实践啊!
    

    回复
    0
  • 天蓬老师

    天蓬老师2017-05-25 15:10:19

    写一个验证中间件(行为),然后在路由里调用,可以任意指定哪些页面需要调用这个验证的中间件.

    可以看下手册里行为那一部分

    回复
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-25 15:10:19

    不用每个页面引入判断啊,你把所有的控制器继承一个公共的控制器,在公共的控制器写一次session判断就可以了

    回复
    0
  • 取消回复