cookies和storage的区别

首先说说Cookie和H5新出的Storage的区别

分类cookieslocalStoragesessionStorage
有效期一般由服务器生成,可设置失效时间。如果在浏览器端生成Cookie,默认是关闭浏览器后失效除非被清除,否则永久保存仅在当前会话下有效,关闭页面或浏览器后被清除
数据大小4K左右5M左右同左
与服务器端通信每次都会携带在HTTP头中,如果使用cookie保存过多数据会带来性能问题仅在客户端(即浏览器)中保存,不参与和服务器的通信同左

cookies鉴权过程

cookies.png

  1. 客户端第一次访问服务器时服务器端创建seesion,然后保存seesion(我们可以将seesion保存在内存中,也可以保存在redis中,推荐使用后者),然后给这个session生成一个唯一的标识字符串,然后在响应头中返回这个唯一标识字符串。
  2. 签名。这一步通过秘钥对sid进行签名处理,避免客户端修改sid。(非必选)
  3. 浏览器中收到请求响应的时候会解析响应头,然后将sid保存在本地cookie中,浏览器在下次http请求的请求头中会带上该域名下的cookie信息,
  4. 服务器在接受客户端请求时会去解析请求头cookie中的sid,然后根据这个sid去找服务器端保存的该客户端的session,然后判断该请求是否合法。

JWT鉴权过程

token.jpg
截屏2020-03-21上午9.44.38.png
1. 客户端使用用户名和密码的方式向后台请求登录
2. 服务器验证账号和密码的真伪,如果正确,则通过后台秘钥加密生成一个token字符串返回给客户端
3. 客户端收到token之后保存起来,之后的每次请求都要在请求头里面携带token(不同于cookies自动发送)
4. 服务器收到token之后,通过秘钥进行验证是否为当前服务器颁发,通过验证则返回数据。

总结

cookies鉴权是最常见的方法,但是可能会导致一些安全性的问题,通过CSRF攻击,当登录的服务没有退出或者cookies还没失效,通过诱导触发一个get请求导致财产等受损(默认情况下cookies会在get请求下自动发送),除此之外还有一个性能问题,cookies对应的session是存储在服务端的,一旦登录的用户很多会导致服务器内存开销过大,并且做负载均衡的时候也会出现分布式session的问题等,在token鉴权中,也会出现一些需求不太好解决,因为jwt鉴权是无状态的,注销用户等操作老token依旧还可使用以及token续签问题等,但是我们还要根据使用场景灵活使用两种鉴权方式。

Last modification:March 21, 2020
If you think my article is useful to you, please feel free to appreciate