thinkphp如何在每个页面设置session验证

在进行后台开发时,为了保证系统的安全性,通常会在每个页面设置session验证,以确保用户的登录状态以及权限。而在thinkphp中,实现这一功能非常简单。

1. 开启Session

在 ThinkPHP 中,默认情况下是不开启 Session 的,需要在系统配置中进行开启。这里有两个地方需要修改:

1. 修改 application/config.php 文件,找到 'use_session' 项,将其修改为 true。

2. 修改 application/config/convention.php 文件,找到 'use_session' 项(与上一项不同的是,这一项的值是一个字符串),将其修改为 true。

2. 创建 Base 控制器

我们需要创建一个 Base 控制器,所有的其他控制器都需要继承这个 Base 控制器。

这个 Base 控制器里边可以做一些所有控制器都需要的初始化操作,比如判断用户是否登录等。而我们要做的就是在这个 Base 控制器中编写一个验证用户登录的方法,并在控制器的构造函数中调用这个方法。

具体实现如下:

namespace app\admin\controller;

use think\Controller;

class Base extends Controller

{

public function __construct()

{

parent::__construct();

$this->checkLogin();

}

// 验证用户是否登录

protected function checkLogin()

{

if(empty(session('admin'))) {

$this->error('请先登录', 'admin/login/index');

}

}

}

3. 编写登录验证方法

这个方法是根据checkLogin中的session('admin')变量来判断用户是否登录,如果没有登录就跳转到登录页面。

在这个方法中可以判断用户是否有权限访问当前页面,如果没有则跳转到没有权限页面。

具体实现如下:

protected function checkAuth()

{

$auth = new \Auth();

$url = request()->url();

$admin = session('admin');

$role_id = $admin['role_id'];

if($role_id != 1 && !$auth->check($url, $admin['id'])) {

$this->error('没有权限访问', 'admin/index/noauth');

}

}

4. 在控制器中调用验证方法

在控制器的构造函数中调用checkAuth方法即可。

具体实现如下:

namespace app\admin\controller;

class Index extends Base

{

public function index()

{

$this->checkAuth();

return $this->fetch();

}

}

总结

以上就是在ThinkPHP中实现session验证的方法。通过这种方式,可以很容易的保证系统的安全性,防止未经授权的用户访问系统资源。同时也可以根据不同用户身份,控制其权限访问的范围。

后端开发标签