http无状态协议

cookie

  1. 服务端产生内容,发送浏览器保存本地,cookie可以被来回传递,主要用于记录用户的会话状态、身份验证、跟踪用户的行为
  2. 优点:
    1. 在浏览器和服务器间来回传递,适用于跟踪用户行为
    2. 可以手动设置过期时间,灵活调节存储时间
  3. 缺点:
    1. 每次请求都携带cookie数据,增加流量浪费性能
    2. 在http中明文传输不够安全,容易被篡改
    3. 存储容量小,一般为4KB
  4. 应用场景:在客户端和服务器之间共享数据 + 长期存储

session(会话)

  1. 开始:浏览器访问服务器
  2. 结束:比较模糊
  3. 不同网站对与用户的会话都设定了时间(结束会话)以及唯一的ID(session ID)
  4. 一般保存在数据库中
  5. 服务器把session ID和会话结束时间发送给浏览器(cookie)

localStorage(类似sessionStorage)

html5引入,web API

  1. 允许在浏览器中长期存储键值对数据,不随http请求发送到服务器
  2. 优点:
    1. 存储容量较大,一般为5M
    2. 存储的数据在客户端浏览器可以永久保存,不担心丢失
    3. 操作方便,API友好,能通过JS直接访问
  3. 缺点:
    1. 一网站只能访问自己域下的LS
    2. 不支持在不同浏览器间共享数据
  4. 只在客户端长期存储 + 无需与服务器交互

sessionStorage

html5引入

  1. 数据仅在浏览会话期间有效
  2. 只在单个标签页或者窗口之间共享数据,关闭后数据会清除
  3. 优点:
    1. 数据只存储在客户端
    2. 刷新页面仍有原来会话数据
    3. 每个标签/窗口间数据独立
  4. 缺点:
    1. 不适合长期存储
    2. 数据不共享,使用场景有限
  5. 应用场景:只在客户端 + 会话期间暂存

token [JWT(JSON Web Token)]

  1. 用户第一次登陆网页->服务器生成JWT(不保存),保存JWT签名的密文
  2. 把JWT发给浏览器(以cookie/storage形式存储)
  3. 用户每次发送请求都会把JWT发送给服务器
  4. token存储在用户处
  5. JWT组成:header.payload.signature
    1. header:声明用什么算法生成签名
    2. payload:特定数据(有效期.etc)
    3. signature:header,payload经过base64编码和算法加密生成的签名
  6. token保存在浏览器中