Cookie、Session、Token、JWT

357 阅读3分钟
  • Cookie(信息存储在本地)
  • Session(信息存储在服务端,客户端仅仅是拿到了SessionID)
  • Token(信息存储在本地的token中,但是钥匙在服务器,不过跟session相比,不需要去查询客户信息了)
  • JWT(信息和钥匙都在本地中,但只有服务器可以解密。因此不会去查询数据库)

什么是 Cookie

  • HTTP 是无状态的协议(对于事务处理没有记忆能力,每次客户端和服务端会话完成时,服务端不会保存任何会话信息

什么是 Session

  1. session 是基于 cookie 实现的,session 存储在服务器端,sessionId 会被存储到客户端的cookie 中。

image.png

SessionID 是连接 Cookie 和 Session 的一道桥梁。

Cookie 和 Session 的区别

  • 安全性: Session 比 Cookie 安全,Session 是存储在服务器端的,Cookie 是存储在客户端的。
  • 存取值的类型不同:Cookie 只支持存字符串数据,想要设置其他类型的数据,需要将其转换成字符串,Session 可以存任意数据类型。
  • 有效期不同: Cookie 可设置为长时间保持,比如我们经常使用的默认登录功能,Session 一般失效时间较短,客户端关闭(默认情况下)或者 Session 超时都会失效。
  • 存储大小不同: 单个 Cookie 保存的数据不能超过 4K,Session 可存储数据远高于 Cookie,但是当访问量过多,会占用过多的服务器资源。

什么是token

token 的身份验证流程:
Acesss Token

image.png

  1. 客户端使用用户名跟密码请求登录
  2. 服务端收到请求,去验证用户名与密码
  3. 验证成功后,服务端会签发一个 token 并把这个 token 发送给客户端
  4. 客户端收到 token 以后,会把它存储起来,比如放在 cookie 里或者 localStorage 里
  5. 客户端每次向服务端请求资源的时候需要带着服务端签发的 token
  6. 服务端收到请求,然后去验证客户端请求里面带着的 token ,如果验证成功,就向客户端返回请求的数据
token与session的区别:

1、session是一种记录服务器与客户端会话状态的机制,使服务端有状态话,可以记录会话信息。而token是令牌,是访问资源时所需要的凭证,token使服务端无状态话,不会存储会话信息。 2、基于token的用户认证的一种服务端无状态的认证方式,服务端不用存放token数据,客户端中的token就包含认证的数据,因为不会去频繁的查询数据库,服务端只会解析token来认证。因此相对于session来说,是用token的计算时间换取session的存储空间

Refresh Token
  • 另外一种 token——refresh token
  • refresh token 是专用于刷新 access token 的 token。如果没有 refresh token,也可以刷新 access token,但每次刷新都要用户输入登录用户名与密码,会很麻烦。有了 refresh token,可以减少这个麻烦,客户端直接用 refresh token 去更新 access token,无需用户进行额外的操作。

image.png

什么是 JWT

image.png

Token 和 JWT 的区别

  • Token:服务端验证客户端发送过来的 Token 时,还需要查询数据库获取用户信息,然后验证 Token 是否有效。
  • JWT: 将 Token 和 Payload 加密后存储于客户端,服务端只需要使用密钥解密进行校验(校验也是 JWT 自己实现的)即可,不需要查询或者减少查询数据库,因为 JWT 自包含了用户信息和加密的数据。