首页 > 代码库 > ThinkPHP判断是否登录

ThinkPHP判断是否登录

  在开发WEB后台时,在每个页面都需要判断当前是否处于登录状态。通常情况下会判断是否存在指定的SESSION,如果存在则认为是已经登录,如果不存在则认为没有登录,那么需要跳转到登录页面。


  如果在每个页面中都写一段判断是否登录的代码,那么就非常的繁琐了。但是如果使用面向对象的继承特性,那么实现起来就非常的容易了。下面是使用ThinkPHP来简单实现一个判断是否登录的例子。


  首先,写一个控制器,代码如下:

<?php
namespace Home\Controller;
use Think\Controller;

class AuthController extends Controller {
    public function __construct() {
        if ( !isset($_SESSION[‘username‘]) || $_SESSION[‘username‘] == ‘‘ ) {
            $this->redirect(‘Index/index‘, array(), 3, ‘您尚未登录,正在跳转至登录页面...‘);
        }
        // 在这里必须调用父类的构造函数
        parent::__construct();
    }
}

  这个控制器继承了ThinkPHP的Controller类,然后在构造函数__construct()中判断是否存在$_SESSION[‘username‘]这个session值,如果不存在则表示没有登录,那么就通过$this->redirect()进行跳转。

  如果存在的话,那么就说明已经登录了,那么就调用父类的构造函数,如果不调用父类的构造函数,那么这个控制器再被其他控制器继承以后是会报错的。


  写好这个控制器以后,然后让具体的控制器来继承它,代码如下:

<?php
namespace Home\Controller;
use Think\Controller;
class MainController extends AuthController {
    public function index() {
        $this->display();
    }
}

  让MainController继承AuthController类,那么在调用MainController这个控制器时,按照类的实例化顺序,会先实例化AuthController类,在AuthController的构造函数中则会判断是否登录了。

  在写其他后台控制器时,也同样继承AuthController这个类,就都会先判断是否登录了。当然了,在写登录页面的控制器时,就不能继承AuthController这个类了。登录页面的控制器直接继承Controller类即可。

本文出自 “无觉的BLoG” 博客,请务必保留此出处http://wujue.blog.51cto.com/11999347/1891638

ThinkPHP判断是否登录