在进行后台开发时,为了保证系统的安全性,通常会在每个页面设置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验证的方法。通过这种方式,可以很容易的保证系统的安全性,防止未经授权的用户访问系统资源。同时也可以根据不同用户身份,控制其权限访问的范围。