ThinkPHP6项目基操(16.实战部分 redis+token登录)
redis+token登录
- 前言
- 一、生成唯一token
- 二、设置token并返回token到前端
- 三、登录拦截器(需要登录/不需登录)
前言
登录一般可以使用session
处理,它使用比较简单,但是一般用在web
端比较多。如果需要考虑在多端运行,使用redis+token
方式更加方便,为啥使用redis
而不是使用数据库存储token
呢?当然数据库是可以存储的,后台可以请求数据库查询token
字段,但是如果考虑高并发的情况,redis
更加适合,一般查询用户信息的地方不会很多,判断用户是否登录的情况会比较多。
一、生成唯一token
可以新建一个common
类,专门放与字符串相关的方法:
<?phpnamespace app\common\lib;class Str
{public static function getLoginToken($string){// 生成 token$str = md5(uniqid(md5(microtime(true)), true));return sha1($str . $string);}
}
二、设置token并返回token到前端
在登录接口中,先判断参数,如果参数通过,在生成token
,将token
存于radis
中并设置失效时间,然后返回token
到前端:
// business层的登录方法
public function login($data){// 省略登录参数验证与数据库更新操作$token = Str::getLoginToken($data["phone_number"]);$redisData = ["id" => $userId,"username" => $username];// 保存token到redis, 有效期7天$res = cache(config("radis.token_pre").$token, $redisData, 7 * 24 * 3600);return $res ? ["token" => $token, "username" => $username] : false;
}
这里直接使用
cache
保存,是因为在cache.php
配置文件里设置了方式为redis
,详情可以看这篇文章的3.4配置缓存redis:阿里云短信结合redis实现登录
// controller控制器层的登录方法 调用business层的方法
$result = (new User())->login($data);
if($result){return show(config('status.success'), "登录成功", $result);
}else{return show(config('status.error'), "登录失败");
}
前端请求成功后获取到token
,然后保存下来,下次发请求的时候带上,后台去redis
里查询,如果token
不存在或过期就会被后台拦截。
Tips: 这里的
token
也不是百分百安全,因为如过有用户获取到了token
,那么在有效期内这个token
可以一直访问到后台数据,这个也是无法解决的事。
三、登录拦截器(需要登录/不需登录)
待写。。。
⭐️重磅推荐:免费商用电商系统
ThinkPHP6项目基操(16.实战部分 redis+token登录)相关推荐
- ThinkPHP6项目基操目录
前言 ThinkPHP是一个免费开源的,快速.简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的.ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色 ...
- ThinkPHP6项目基操(15.实战部分 阿里云短信redis)
阿里云短信redis 一.安装阿里云短信SDK 二.封装到项目lib中 三.radis记录验证码 1. 安装redis服务 2. 可视化redis管理软件 3. PHP安装redis扩展 4. 配置缓 ...
- ThinkPHP6项目基操(11.实战部分 部署后台静态页面模板及后台登录页面)
实战部分 部署后台静态页面模板及后台登录页面 前言 一.部署静态资源到项目 1.新建后台静态资源文件夹 二.后台登录页面 1. 目录结构 2. 模板字符串替换配置 前言 网站后台一般是在基础静态页面上 ...
- ThinkPHP6项目基操(20.实战部分 数据库操作返回值总结)
数据库操作返回值总结 0. 前言 1. Db类操作数据库 1.1 新增 1.2 更新 1.3 删除 1.3.1 单条删除 1.3.2 批量删除 1.4 查询 1.4.1 单笔记录 1.4.2 多笔记录 ...
- ThinkPHP6项目基操(13.实战部分 项目中的自定义异常处理总结 错误页面API错误)
项目中的自定义异常处理总结 错误页面&API错误 前言 一.异常分类 1. 控制器找不到 2. 方法找不到 3. 请求资源不存在 4. 系统內部异常.HTTP异常等 二.异常处理 1. 前置处 ...
- php登陆项目,ThinkPHP6项目基操(14.实战部分 中间件处理登录流程)
一.定义中间件 namespace app\middleware; class Check { public function handle($request, \Closure $next) { i ...
- ThinkPHP6项目基操(19.实战部分 Mysql模型事务操作)
模型事务操作 前言 1. Mysql数据库注意 2. thinkPHP模型使用事务 前言 事务操作在复杂的数据库操作的时候尤为重要,特别是在操作多张表的时候,如果某一步骤出错了,就会导致有脏数据,会很 ...
- ThinkPHP6项目基操(18.实战部分 表单令牌Token 防CSRF)
表单令牌Token 0. 前言 1. TP6 令牌token使用 1.1 表单提交 1.2 AJAX提交 2. TP6 令牌token验证 2.1 路由验证 2.2 控制器验证 2.3 验证器验证 0 ...
- ThinkPHP6项目基操(17.实战部分 Filesystem文件上传)
Filesystem文件上传 控制器: <?php namespace app\admin\controller; use app\BaseController; use think\facad ...
最新文章
- 黑客把你家网线作“天线”,读取电磁信号就能偷走数据
- boost::mpi::cartesian_communicator相关用法的测试程序
- 在C++中可以用3种方法访问一个字符串
- YznCMS 后台开发框架
- nRF52832 BLE_DFU空中升级OTA(一)安装软件(SDK14.2.0)
- 95-34-025-Context-AbstractChannelHandlerContext
- 基于 snowNLP的微博评论数据情感分析
- python实现七种方法去除列表中的重复元素
- canvas绘制经典星空连线效果
- OSChina 周二乱弹 —— 我国领先世界的IT技术
- 灰度发布 java_灰度发布系统的实现步骤
- 乐橙本地录像回放不了_解决大华或乐橙录像机添加摄像头不能显示的密码问题...
- linux wps 公式编辑器,WPS 2012数学公式编辑器的使用方法(详细图解)
- Android启动过程研究(二:AIL描述的init.rc)
- Centos 6.6安装chrome 谷歌浏览器
- 如何减少block的数量?也就是减小Namenode的内存压力?
- Go语言交叉编译二进制文件
- 解决联想拯救者混合模式+不插电情况下屏幕亮度和颜色异常问题
- 中年男人的职场生存画像:这一天,我都在不停道歉......
- ssci源刊里有开源期刊吗_科学网—报告SCI数据库,以下几个期刊可疑专坑中国作者 - 喻海良的博文...