当前位置: 首页 > news >正文

cookie,session,token 的区别

      • 解决什么问题?
      • Cookie(客户端存储)
          • 问题来了
      • Session(会话)
          • 解决的问题
          • 问题来了
      • token(令牌)
          • 解决的问题
          • 问题:token是无状态的
            • 如何解决?

解决什么问题?

  • 解决http无状态的问题,说简单点就是用户身份的验证

举个例子:

张三在银行里面存1块钱,第二天张三去银行里取1块钱,银行就问你怎么证明你是张三?,你怎么证明你在这里存了1元?

http是无状态的,他也不知道你之前在干了什么

Cookie(客户端存储)

浏览器自动支持的储存用户访问的信息的,数据储存在客户端

举个例子:
张三在银行里面存1块钱,然后银行给张三打了个存条,(姓名:张三;存款 : 1 元;有效期 1 天)

第二天张三去银行里取1块钱,就把存条给银行,银行核验存条,就给张三 1 元

问题来了

问题 1:

张三在银行里面存1块钱,然后银行给张三打了个存条,(姓名:张三;存款 : 1 元;有效期 1 天)

回家的时候存条被李四看见了,李四做了一个一模一样的存条(姓名:张三;存款 : 1 元;有效期 1 天)

第二天李四去银行里取张三的1块钱,就把存条给银行,银行就给李四 1 元

问题 2:
张三在银行里面存1块钱,然后银行给张三打了个存条,(姓名:张三;存款 : 1 元;有效期 1 天)

回家的时候偷偷将存条的数字改成 2 元(姓名:张三;存款 : 2 元;有效期 1 天)

第二天张三去银行里取钱,就把存条给银行,银行核验存条,就给张三 2 元

就是 cookie 的数据容易泄露或者被篡改的问题.

Session(会话)

  • 定义:Session 是服务器端保存的用户状态信息。每个用户的会话在服务器端有一个唯一的标识(通常是 Session ID)。
解决的问题
  • 主要是为了解决cookie(客户端储存)容易被篡改与泄露的问题

举个例子:

张三在银行里面存1块钱,然后银行有一个记账本,然后记录,(序号 001,姓名:张三;存款 : 1 元;有效期 1 天);然后给张三一个小票(001)

第二天张三去银行里取钱,就把小票(001)给银行,银行根据小票查询账本找到张三的存款记录,给张三 1 元

问题来了

现在银行越来越大,开了很多子银行,今天张三去银行的 1 号分行存 1 元, 明天到 2 号分行取钱的时候找不到他的存款记录.

就是服务器拓展问题,服务器拓展的时候,不同服务器的数据不是共享的.因此 session 也不是共享的

所以

  1. 要么使用一个共享的空间(MySQL,redis 这样的数据库),
  2. 要么就把数据给用户持有,但是用户持有又会有安全问题

token(令牌)

用户持有的访问令牌

解决的问题
  • 解决用户持有数据的安全问题
    原理: 数据进行加密处理

举个例子:

  • 现在银行做了一个密码本
    • 将客户的存条进行加密,没有密码本,就无法看懂存条的内容,也就无法修改

张三在银行的 1 号分行里面存1块钱,银行先开了个存条,(姓名:张三;存款 : 1 元;有效期 1 天),然后讲存条进行加密变成了一个加密存条(************),然后给张三,然后告诉张三,拿着这个可以到任何一家银行取到钱

第二天张三去银行的二号分行里取钱,就把加密存条(************)给银行,银行先通过密码本进行解密,发现内容是(姓名:张三;存款 : 1 元;有效期 1 天),就给张三 1 元

问题:token是无状态的

token是无状态的,除了自动过期,无法强制过期(失效)

如何解决?
  1. 使用session的方式,如果有问题在服务端删除(过期)他的session.
  2. 采用黑名单的方式.

举个例子:

张三在银行的 1 号分行里面存1块钱,银行先开了个存条,(姓名:张三;存款 : 1 元;有效期 1 天),然后讲存条进行加密变成了一个加密存条(************),然后给张三,然后告诉张三,拿着这个可以到任何一家银行取到钱

这时张三犯法了(他的一块钱是骗来的),要冻结张三的所有资产,这时候必须通知每个银行,张三有问题,不能取走 1 元钱

这时候银行推出一个黑名单,每个人要取钱的时候先检查是否在黑名单中,如果在就无法操作.

http://www.lryc.cn/news/509499.html

相关文章:

  • 基于OpenAI Whisper AI模型自动生成视频字幕:全面解析与实战指南
  • 物理学天空的两朵乌云——量子论与相对论
  • 聚类之轮廓系数
  • Jenkins 构建流水线
  • RTK部分模糊度固定测量流程图
  • 力扣-数据结构-2【算法学习day.73】
  • 操作系统导论读书笔记
  • 基于3D-Speaker进行区分说话人项目搭建过程报错记录 | 通话录音说话人区分以及语音识别 | 声纹识别以及语音识别 | pyannote-audio
  • 如何使用流式渲染技术提升用户体验
  • 【接口自动化连载】使用yaml配置文件自动生成接口case
  • 前端安全 常见的攻击类型及防御措施
  • 来道面试题——CopyOnWriteArrayList
  • 【Rust自学】5.1. 定义并实例化struct
  • React 生命周期完整指南
  • python中os._exit(0) 强制关闭进程后来杀死线程
  • LeetCode:257. 二叉树的所有路径
  • RSICV国产芯片之CHV208
  • 理解神经网络
  • Android 之 List 简述
  • 设计模式の中介者发布订阅备忘录模式
  • 云手机群控能用来做什么?
  • fpgafor循环语句使用
  • 【FastAPI】BaseHTTPMiddleware类
  • Solon v3.0.5 发布!(Spring 可以退休了吗?)
  • 网络安全攻防演练中的常见计策
  • SD卡模块布局布线设计
  • Flask-----SQLAlchemy教程
  • STM32 高级 物联网通信之CAN通讯
  • “乡村探索者”:村旅游网站的移动应用开发
  • 前端案例---自定义鼠标右键菜单