一篇文章告诉你Cookie、Session和Token之间的关系

无论是Cookie、Session还是Token,他们的核心就是鉴权和存储。

1、Cookie


Cookie 是存储在客户端浏览器中的小块数据,由服务器发送并由客户端保存。
当用户首次访问网站时,服务器会在响应头中发送一个Set-Cookie字段,浏览器会将这个Cookie存储在本地。之后,每次浏览器向服务器发送请求时,都会携带这个Cookie。

举例

用户想要在一个购物网站上购买商品,首先需要进行登录操作。登录成功后,用户可以在网站上浏览商品、添加商品到购物车等。

用户输入密码登录成功后,服务器会生成一个session ID,这个session ID会存储在服务器上,同时服务器会通过Set-Cookie响应头将Session ID发送给客户端(就是浏览器),浏览器将其存储在Cookie中。之后用户继续浏览网站时,浏览器会自动在每次HTTP请求中携带包含Session ID的Cookie。服务器通过Cookie中携带的session ID来识别用户的身份和会话状态

特点
存储于客户端(就是浏览器)。
可以设置过期时间。
用于持久化数据存储(如用户偏好设置、会话标识等)。
用法
保存用户登录信息,如记住用户名和密码。
存储用户偏好设置,如语言选择、主题颜色等


2、Session

Session 是服务器端存储的用户会话信息,用于跟踪用户在网站上的活动。
每个用户会话都有一个唯一的 Session ID,该 ID 通常存储在 Cookie 中。

举例:

服务器上的Session用于存储用户的会话信息,如用户的登录状态、购物车内容等​​​​​​​。并且,Session信息存储在服务器上,相比客户端存储更为安全,因为服务器端的数据保护措施通常更加严格。
特点
存储于服务器端。
生命周期通常与会话持续时间相同(如浏览器关闭或用户登出时终止)。
用于存储用户相关的敏感数据(如登录状态、购物车内容等)。
用法
维护用户登录状态。
存储用户在会话过程中产生的数据(如购物车内容)


3、Token

在现代的分布式系统和微服务架构中,传统的 Cookie 和 Session 机制存在一些局限性。
因为Session 是存储在服务器端的,这意味着服务器需要保存每个用户的会话信息。当用户数量增加时,服务器的内存和存储压力也会增加。同时,在一个负载均衡的环境中,用户的会话需要在多个服务器之间共享。这通常需要会话粘性(用户总是被路由到同一个服务器)或者使用共享存储(如数据库或缓存),这增加了复杂性。

因此Token应运而生,Token 是一种认证机制,用于在客户端和服务器之间传递身份验证信息。
常用的 Token 有 JWT(JSON Web Token),其结构通常包括 Header、Payload 和 Signature。​​​​​​​
特点
通常存储于客户端(如浏览器的 Local Storage 或 Session Storage)。
具有自包含性(Payload 中包含了用户信息和其他声明)。
可以设置过期时间,通常用于无状态的身份验证。
用法:

用户登录后,服务器生成一个 JWT,包含用户身份和权限信息,并将其返回给客户端。
客户端将 JWT 存储在 Local Storage 或者 Cookie 中,每次请求时将 JWT 放在请求头中。
不同子域之间的请求只需携带同一个 JWT,无需复杂的跨域设置。
服务器只需验证 JWT 的签名和有效性,无需存储会话信息,方便扩展和负载均衡


4、三者之间的关系

Cookie 和 Session:
Cookie 可以用于存储 Session ID,服务器通过 Session ID 识别用户会话。
Cookie 存储于客户端,而 Session 存储于服务器端。


Cookie 和 Token:
Token 可以存储在 Cookie 中,用于跨多个域名的认证。
Token 也可以存储在 Local Storage 或 Session Storage 中。


Session 和 Token:
Session 是服务器端的会话管理机制,而 Token 是无状态的认证机制。
在无状态系统中,Token 替代了传统的 Session 机制
 

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值