Cookie(信息存储在本地)
、Session(信息存储在服务端,客户端仅仅是拿到了SessionID)
、Token(信息存储在本地的token中,但是钥匙在服务器,不过跟session相比,不需要去查询客户信息了)
、JWT(信息和钥匙都在本地中,但只有服务器可以解密。因此不会去查询数据库)
什么是 Cookie
- HTTP 是无状态的协议(对于事务处理没有记忆能力,每次客户端和服务端会话完成时,服务端不会保存任何会话信息
什么是 Session
- session 是基于 cookie 实现的,session 存储在服务器端,sessionId 会被存储到客户端的cookie 中。
SessionID 是连接 Cookie 和 Session 的一道桥梁。
Cookie 和 Session 的区别
- 安全性: Session 比 Cookie 安全,Session 是存储在服务器端的,Cookie 是存储在客户端的。
- 存取值的类型不同:Cookie 只支持存字符串数据,想要设置其他类型的数据,需要将其转换成字符串,Session 可以存任意数据类型。
- 有效期不同: Cookie 可设置为长时间保持,比如我们经常使用的默认登录功能,Session 一般失效时间较短,客户端关闭(默认情况下)或者 Session 超时都会失效。
- 存储大小不同: 单个 Cookie 保存的数据不能超过 4K,Session 可存储数据远高于 Cookie,但是当访问量过多,会占用过多的服务器资源。
什么是token
token 的身份验证流程:
Acesss Token
- 客户端使用用户名跟密码请求登录
- 服务端收到请求,去验证用户名与密码
- 验证成功后,服务端会签发一个 token 并把这个 token 发送给客户端
- 客户端收到 token 以后,会把它存储起来,比如放在 cookie 里或者 localStorage 里
- 客户端每次向服务端请求资源的时候需要带着服务端签发的 token
- 服务端收到请求,然后去验证客户端请求里面带着的 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,无需用户进行额外的操作。
什么是 JWT
Token 和 JWT 的区别
- Token:服务端验证客户端发送过来的 Token 时,还需要查询数据库获取用户信息,然后验证 Token 是否有效。
- JWT: 将 Token 和 Payload 加密后存储于客户端,服务端只需要使用密钥解密进行校验(校验也是 JWT 自己实现的)即可,不需要查询或者减少查询数据库,因为 JWT 自包含了用户信息和加密的数据。