//

Information for details

thinkphp框架如何避免登录出现循环重定向

  我们在用thinkphp开发的时候,经常会出现这种情况,登录的时候,老是说你的页面中包含循环重定向的内容.
下面我就来说明一下几种常见的情况.
在thinkphp中,如果是后台的话,要求必须登录才能进入到主管理界面.那么我们可以通过这种方法来实现.
在控制器中建立一个 CommonController 通用控制器,然后在里面写一个
public function _initialize(){
  //检查是否有session('username')的内容,如果没有则跳转到登录页面...
  没有登录,则跳到登录控制器
  $this->error("请登录",U('login/login'));
}

然后后台所有的控制器都要继承这个CommonController ,并且在每个控制器中都写这个函数
public function _initialize(){
  parent::_initialize();
//必须写上这一句,否则子类将会复写父类的方法,这样父类的验证操作就失效了..
}
这里有没有考虑过这样的问题....
如果我们的登录控制器是LoginController ,也继承这个CommonController的话,问题就来了,当你登录到后台的任何一个页面时,都会提前进行CommonController的_initialize检查登录操作,没有登录,则跳到Login控制器,好了跳到Login控制器之后,又将调用CommonController的_initialize 函数..这就是问题的所在了...
解决方案,要么LoginController不继承CommonController,要么在LoginController中的必须写_initialize()
但是不要执行父类的_initialize()
public function _initialize(){
    //做你想做的事情..
    //不要使用parent::_initialize();即可
}

  好了,如果是前台呢,前台分为几种情况.一种是必须登录,一种是部分模块需要登录.
对于必须登录的这种情况和后台类似了.
下面我们来说说部分模块需要登录的情况.
同样使用后台的方法...
我们可能需要就是当我点击某个模块之后,检查是否登录,没有登录则登录,登录完毕之后跳入我刚才点击的模块.
这里的问题是我们怎么保存我们之前点击的内容的呢..
这里有很多种解决方案,比较好的就是使用ajax方法实现.页面无刷新动态提交,还有我们可以在相应需要登录的模块直接将登录的模板引入进来.
不知大家是否意会到我的思路..
就是我们加入进入到我的博客模块.
public function index(){
    if(not_login){
        $this->display("将登录的视图引入进来");
        exit;
    }
    else{
///////
    }
}

当然相对于的我们的登录控制器在登录成功之后就不要跳转了....直接返回登录成功即可..
public function login(){
    if(success){
        $this->success('登录成功!');
    }
}

  云南然成科技有限公司是云南一家本土的集网站建设、app开发、微信公众平台开发、系统定制开发的高端互联网公司!电话:0871-67333261

  • 滇公网安备 53010202001388号