网络请求中,token和cookie有什么区别?

37 阅读2分钟

cookie

  • http 无状态,每次请求都要带cookie,以帮助识别身份
  • 服务端也可以向客户端set-cookie,cookie大小限制4kb
  • 默认有跨域限制:不可跨域共享、传递cookie

image.png

不跨域共享

image.png

不跨域传递

image.png

解决方案

withCredentials

cookie本地存储

  • HTML5 之前cookie常被用于本地存储
  • HTML5 之后推荐使用localStorage 和 sessionStorage

现代浏览器开始禁止第三方cookie

  • 和跨域限制不同。这里是禁止网页引用第三方JS设置cookie
  • 打击第三方广告,保护用户隐私
  • 新增属性 SameSite:strict/ Lax /None;值可自己选择

cookie 和 session

  • cookie用于登录验证,存储用户标识(如userId)
  • session在服务端,存储用户详细信息,和cookie信息一一对应
  • cookie + session 是常见的登录验证解决方案

image.png

过程

  • cookie 一对一
  • session 存储很多

image.png

token vs cookie

  • cookie 是 HTTP 规范,而token是自定义传递
  • cookie 会默认被浏览器存储,而token需自己存储
  • token默认没有跨域限制

JWT (JSON Web Token)

  • 前端发起登录,后端验证成功之后,返回一个加密的token
  • 前端自行存储这个token(其中包含了用户信息,加密了)
  • 以后访问服务端接口,都要带着这个token,作为用户信息

image.png

答案

  • cookie:http标准;跨域限制;配合session使用
  • token:无标准;无跨域限制;用于JWT

Session 和 JWT 哪个更好?

session优点

  • 原理简单,易于学习
  • 用户信息存储在服务端,可快速封禁某个用户

session 缺点

  • 占用服务端内存,硬件成本高
  • 多进程,多服务器时,不好同步 - 需要使用第三方缓存,如redis
  • 默认有跨域限制

JWT 优点

  • 不占服务端内存
  • 多进程、多服务器不受影响
  • 没有跨域限制

JWT缺点

  • 用户信息存储在客户端,无法快速封禁某用户(可建立黑名单)
  • 万一服务端密钥被泄漏,则用户信息全部丢失
  • token体积一般大于cookie,会增加请求的数据量

答案

  • 如果有严格管理用户信息的需求(保密、快速封禁)推荐session
  • 如没有特殊要求,则使用JWT(如创业初期的网站)

如何实现SSO单点登录

什么是单点登录,登录百度之后,点击百度地图也自动登录

基于cookie

  • cookie默认不可跨域共享,但有些情况下可以设置为共享
  • 主域名相同,如www.baidu.com image.baidu.com
  • 设置cooki domain为主域名,则可共享cookie

image.png

SSO(第三方独立)

  • 主域名完全不同,则cookie无法共享
  • 可使用SSO技术方案

OAuth 2.0(第三方验证登录)

image.png

答案

  • 主域名相同,则可共享cookie
  • 主域名不同,则需使用SSO