session,cookie和token的区别 | 青训营笔记

133 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第4篇笔记

在参加青训营之前我只听过session和cookie,然而简易版抖音项目要用token验证用户身份。所以我了解了一下session,cookie和token

为什么要用他们?

http协议是无状态协议,每次请求之间没什么联系(无上下文)。为了避免用户重复登录,就需要session,cookie等方式跟踪用户身份。

Cookie,Session和token的原理

  1. Cookie: 用户登录被服务器验证过身份后,服务器不保存用户信息。服务器根据用户身份信息产生一个cookie,里面保存着用户身份信息。返回给用户,用户浏览器将服务器返回的cookie保存起来,每次向服务器发送请求时,就会把cookie一起发送,服务器根据收到的cookie对用户身份权限验证。
  2. Session: 用户登录被服务器验证过身份后,服务器将用户信息记录到服务器。并产生个sessionid与用户信息形成对应。服务器将sessionid返回给用户,用户下次发送请求时,携带sessionid。服务器查找对应的用户信息。
  3. token: Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可。

Cookie和Session的区别

  1. 存储用户信息的位置不同:Cookie保存用户信息的位置是客户端浏览器,Session保存用户信息的位置是服务端
  2. 安全性不同:Session保存用户信息的位置是服务端,它很难被修改,Cookie因为是保存在客户端,容易被截取和篡改,安全性不及Session。还是基于Session保存信息在服务器上,要是访问量增多的时候,会消耗服务器的资源。Cookie则不会。

token和Session,Cookie的区别

  1. token可以跨域,session不可以跨域,它是与域名绑定的。
  2. token是开发定义的格式,session,Cookie是基于框架内的格式。token想放在请求体或头都可以。
  3. Cookie 跨站是不能共享的,这样的话如果你要实现多应用的单点登录,很难用Cookie 。只要在 header 中的 authorize 字段(或其他自定义)加上 token 即可完成所有跨域站点的认证。
  4. 在移动端原生请求是没有 cookie 之说的,而 sessionid 依赖于 cookie,sessionid 就不能用 cookie 来传了。如果用 token 的话,由于它是随着 header 的 authoriize 传过来的,也就不存在此问题, token 支持移动平台,可扩展性好.
  5. token和Session实现的校验机制不一样(一个保存在 server,通过在 redis 等中间件获取来校验,一个保存在 client,通过签名校验的方式来校验)