session、cookie、token(详细)

cookie和session

由于http的无状态性,就是说这一次请求和上一次请求是没有任何关系的,互不认识的。为了使某个域名下的所有网页能够共享某些数据,session和cookie出现了。客户端访问服务器的流程如下

  • 首先,客户端会发送一个http请求到服务器端。
  • 服务器端接受客户端请求后,建立一个session,并发送一个http响应到客户端,这个响应头,其中就包含Set-Cookie头部。该头部包含了sessionId。
  • 在客户端发起的第二次请求,假如服务器给了set-Cookie,浏览器会自动在请求头中添加cookie。
  • 服务器接收请求,分解cookie,验证信息,核对成功后返回response给客户端。

请求流程

简而言之, session 有如用户信息档案表, 里面包含了用户的认证信息和登录状态等信息. 而 cookie 就是用户通行证

token
token 的认证方式类似于临时的证书签名,token在客户端一般存放于localStorage,cookie,或sessionStorage中。在服务器一般存于数据库中。

  • token认证流程
    • token 的认证流程与cookie很相似
      • 用户登录,成功后服务器返回token给客户端。
      • 客户端收到数据后保存在客户端
      • 客户端再次访问服务器,将token放入headers中
      • 服务器端采用filter过滤器校验。校验成功则返回请求数据,校验失败则返回错误码
  • token可以抵抗csrf,cookie+session不行

总结

  • session存储于服务器,可以理解为一个状态列表,拥有一个唯一识别符号sessionId,通常存放于cookie中。服务器收到cookie后解析出sessionId,再去session列表中查找,才能找到相应session。依赖cookie。
  • cookie类似一个令牌,装有sessionId,存储在客户端,浏览器通常会自动添加。
  • token也类似一个令牌,无状态,用户信息都被加密到token中,服务器收到token后解密就可知道是哪个用户。需要开发者手动添加。

猜你喜欢

转载自blog.csdn.net/lujiebin/article/details/115440420