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登录)相关推荐

  1. ThinkPHP6项目基操目录

    前言 ThinkPHP是一个免费开源的,快速.简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的.ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色 ...

  2. ThinkPHP6项目基操(15.实战部分 阿里云短信redis)

    阿里云短信redis 一.安装阿里云短信SDK 二.封装到项目lib中 三.radis记录验证码 1. 安装redis服务 2. 可视化redis管理软件 3. PHP安装redis扩展 4. 配置缓 ...

  3. ThinkPHP6项目基操(11.实战部分 部署后台静态页面模板及后台登录页面)

    实战部分 部署后台静态页面模板及后台登录页面 前言 一.部署静态资源到项目 1.新建后台静态资源文件夹 二.后台登录页面 1. 目录结构 2. 模板字符串替换配置 前言 网站后台一般是在基础静态页面上 ...

  4. 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 多笔记录 ...

  5. ThinkPHP6项目基操(13.实战部分 项目中的自定义异常处理总结 错误页面API错误)

    项目中的自定义异常处理总结 错误页面&API错误 前言 一.异常分类 1. 控制器找不到 2. 方法找不到 3. 请求资源不存在 4. 系统內部异常.HTTP异常等 二.异常处理 1. 前置处 ...

  6. php登陆项目,ThinkPHP6项目基操(14.实战部分 中间件处理登录流程)

    一.定义中间件 namespace app\middleware; class Check { public function handle($request, \Closure $next) { i ...

  7. ThinkPHP6项目基操(19.实战部分 Mysql模型事务操作)

    模型事务操作 前言 1. Mysql数据库注意 2. thinkPHP模型使用事务 前言 事务操作在复杂的数据库操作的时候尤为重要,特别是在操作多张表的时候,如果某一步骤出错了,就会导致有脏数据,会很 ...

  8. ThinkPHP6项目基操(18.实战部分 表单令牌Token 防CSRF)

    表单令牌Token 0. 前言 1. TP6 令牌token使用 1.1 表单提交 1.2 AJAX提交 2. TP6 令牌token验证 2.1 路由验证 2.2 控制器验证 2.3 验证器验证 0 ...

  9. ThinkPHP6项目基操(17.实战部分 Filesystem文件上传)

    Filesystem文件上传 控制器: <?php namespace app\admin\controller; use app\BaseController; use think\facad ...

最新文章

  1. 黑客把你家网线作“天线”,读取电磁信号就能偷走数据
  2. boost::mpi::cartesian_communicator相关用法的测试程序
  3. 在C++中可以用3种方法访问一个字符串
  4. YznCMS 后台开发框架
  5. nRF52832 BLE_DFU空中升级OTA(一)安装软件(SDK14.2.0)
  6. 95-34-025-Context-AbstractChannelHandlerContext
  7. 基于 snowNLP的微博评论数据情感分析
  8. python实现七种方法去除列表中的重复元素
  9. canvas绘制经典星空连线效果
  10. OSChina 周二乱弹 —— 我国领先世界的IT技术
  11. 灰度发布 java_灰度发布系统的实现步骤
  12. 乐橙本地录像回放不了_解决大华或乐橙录像机添加摄像头不能显示的密码问题...
  13. linux wps 公式编辑器,WPS 2012数学公式编辑器的使用方法(详细图解)
  14. Android启动过程研究(二:AIL描述的init.rc)
  15. Centos 6.6安装chrome 谷歌浏览器
  16. 如何减少block的数量?也就是减小Namenode的内存压力?
  17. Go语言交叉编译二进制文件
  18. 解决联想拯救者混合模式+不插电情况下屏幕亮度和颜色异常问题
  19. 中年男人的职场生存画像:这一天,我都在不停道歉......
  20. ssci源刊里有开源期刊吗_科学网—报告SCI数据库,以下几个期刊可疑专坑中国作者 - 喻海良的博文...

热门文章

  1. Robots.txt 协议详解及使用说明
  2. GDB分析PHP连接Memcached 导致coredump问题
  3. 你必须要知道的架构知识~第二章 代码是否面向对象,要看你的继承怎么用
  4. 帆软独家:数字化转型打造企业数据战斗力
  5. 一流企业都在做数据治理,还用百万年薪招人,想做的无非这10点
  6. 如何改变对话或窗体视窗的背景颜色
  7. 15个优雅的Python编程技巧,掌握后瞬间玩转Python
  8. web前端 如何入门人工智能算法
  9. 2022年,我只做 3 件事
  10. 第 6 节:前端面试指南 — React 篇(附面试题答案)