在开发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类即可。
时间: 2024-10-13 00:54:06