thinkphp5框架里在用户登录后,要给前端web浏览器一个token字符串,如果用ajax请求的方式每个请求都加个单独的参数token,这种方式只能限制接口,如果是请求的一个页面,那这个页面是没有办法携带这个token参数的,这种情况就要用cookie了。后台登陆成功 的时候,设置一个cookie,值为token,那么浏览器所有的请求就都会携带这个cookie,后台取出这个cookie做校验就行了。
一下是代码
登录校验,成功后,告诉浏览器保存token到cookie
简化版:
php
public function login(){
//token 存入 Cookie(页面请求)
cookie('token', $token, 3600 * 24 * 7); // 7 天有效期
}
真实代码,包含了session校验:
php
public function login(){
//token 存入 Cookie(页面请求)
cookie('token', $token, 3600 * 24 * 7); // 7 天有效期
//保存操作员的信息到session
session('operatorid',$operator['id']);
session('shop_id',$shop['shop_id']);
}
拦截请求,登陆校验的时候
简化版:
php
public function _initialize()
{
// 1. 调用父类初始化
parent::_initialize();
// 从 Cookie 获取 Token
$token = cookie('token');
$shoplogin = Db::name('tbshoplogin')->where('token', $token)->find();
if (!$shoplogin) {
$this->redirect('webpc/login/index');
}
}
真实代码,包含其他情况,接口参数和session校验:
php
public function _initialize()
{
// 1. 调用父类初始化
parent::_initialize();
// 从 Cookie 获取 Token
$token = cookie('token');
if(!$token){
// 获取路由参数或 GET/POST 参数
$token = input('token');
}
$shoplogin = Db::name('tbshoplogin')->where('token', $token)->find();
if (!$shoplogin||Session::get('shop_id')=='' || Session::get('operatorid')=='') {
$this->redirect('webpc/login/index');
}
}
免费在线工具网站 https://mantools.top/