Cookie、Session、Token的区别

有人或许还停留在它们只是验证身份信息的机制,但是它们之间的关系你真的弄懂了么?

发展史:

Cookie:

       Netscape Communications 公司引入了 Cookie 概念,作为在客户端存储状态信息的一种方法。初始目的是为了解决 HTTP 的无状态性,使网站能够记住用户并保持状态。

Session:

HTTP 1.0 引入了基本的会话管理,通过在请求头中添加 "Cookie" 字段来传递会话标识符。

Token:

       随着移动应用和 API 的兴起,基于 Token 的身份验证得到了更多关注和应用。OAuth 2.0 的标准化推动了令牌在 web 开发中的应用,支持无状态的身份验证和授权。


       在以前,你去登录一个网站,没有个人的分别,所以也区不区分也无关紧要,但是随着互联网的发展,互联网越来越重视你是谁?所以cookie就诞生了,它是一个存储在客户端的一小段数据,当用户登录的时候,由服务端发送给客户端并存储在客户端本地,这样就可以验证用户信息

但是这样岂不对程序员美滋滋,我们假设有一个小穷(程序员)还有一个老富(顶级富豪)

账户转钱:

老富:

 小穷:

 有一天,小穷通过技术手段搞到了老富的cookie,结果小穷差点吃公家饭 

       基于cookie这种不安全性,session逐渐问世,它是一种会话机制,用户信息存储在服务器上,这样就相对于cookie比较安全

 小穷这时候留下了悔恨的眼泪!!!

       但是随着时代的发展,由于用户越来越多,一台服务器已经扛不住了,单体架构逐渐被淘汰,分布式逐渐登上了历史的舞台,这时候,问题又来了,由于分布式是采取负载均衡的方式采取服务器请求的,所以我们不能仅限于一台服务器进行存储session,总不能每次发送请求的时候都要进行一次身份验证,那么当时就有两种情况可以解决这个问题:

1.单独拎出来一个服务器,专门作为session的验证

2.在每个服务器上都存储一份session

       这两种方式显然对资源的一种浪费,数以千万计的用户的session占用的内存可不是一个小数目,所以我们的下一个主角又登场了——Token

         Token是一种轻量级的身份验证和授权机制,一般是一小段字符串,当每次用户成功登录或请求时,服务器会生成一个Token(用户ID、角色、权限以及一些元数据),通过使用密钥对其进行加密和签名确保安全性,下一次客户端访问时携带Token,服务器用相同的密钥进行解密和检验签名,确保安全性

 使用Token的效果既保障了安全问题又避免了资源浪费

 Token的优点真的数不胜数,列几点:

  • 安全性:经过了层层加密(加密和签名)确保完整性和安全性
  • 无状态:服务器不需要在本地存储会话数据,不需要维护会话状态,更加容易扩展与分布式部署
  • 跨域支持:Token可以通过HTTP请求头、URL参数或者Cookie发送
  • 灵活性:携带自定义的用户信息
  • 性能:无需服务器存储和查询会话状态,提供服务器的性能和响应速度
  • 轻量级:比传统的会话更加轻量级(不需要在服务器上存储状态信息)
  • 可扩展性:方便的扩展以及适应不同的需求
  • 单点登录:登录一次访问多个关联应用
  • 可移植性:不依赖于特定的编程语言

Cookie:

       Cookie是存储在用户浏览器中的小段数据,由服务器发送给客户端并存储在客户端本地。它通常用于持久性存储一些用户相关的信息,如登录凭证、用户偏好设置等,Cookie可以设置过期时间,可以是会话级别的(在用户关闭浏览器后过期)或者是长期的(设置特定的过期时间),由于存储在客户端,Cookie可以在用户访问不同页面时被浏览器自动发送到服务器

Session:

       会话是一种服务器机制,用于跟踪用户在网站上的活动,服务器在用户访问网站时为每个用户创建一个唯一的会话标识(Session ID),这个标识存储在Cookie中或者通过URL参数传递,然后,服务器可以根据会话标识来识别特定的用户,并在服务器端存储用户状态信息,以便跟踪用户的状态和数据,会话数据通常在服务器上存储,因此相对安全

Token:

       Token是一种轻量级的身份验证和授权机制,广泛用于构建于API的 应用和单点登录系统,用户登录后,服务器会颁发一个Token,包含有关用户身份的信息和一些元数据,这个Token被用户保存,并在每次向服务器发送请求时随请求一起发送,服务器可以验证Token的有效性,并根据Token中的信息执行身份验证和授权,Token可以是短期的,也可以是长期的,但是为了安全性通常会有过期时间

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃橘子的Crow

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值