Contents

本地存储

总结

特性 cookie localStorage sessionStorage indexDB
数据生命周期 一般由服务器生成,可以设置过期时间 除非被清理,否则一直存在 页面关闭就清理 除非被清理,否则一直存在
数据存储大小 4K 5M 5M 无限
与服务端通信 每次都会携带在 header 中,对于请求性能影响 不参与 不参与 不参与

Cookie原本用于解决HTTP无状态性导致的状态管理不足,一般只用来作为状态存储。

Cookie属性

对于Cookie需注意安全性

属性 作用
value 如果用于保存用户登录态,应该将该值加密,不能使用明文的用户标识
http-only 不能通过 JS 访问 Cookie,减少 XSS 攻击
secure 只能在协议为 HTTPS 的请求中携带
same-site 规定浏览器不能在跨域请求中携带 Cookie,减少 CSRF 攻击

缺点

  • 容量缺陷,大小上限为4kb
  • 性能缺陷,因为不管请求是否需要,每次请求都会携带完整的Cookie,
  • 安全缺陷,以纯文本的形式传递,容易被非法用户截获,在HttpOnly为false的情况下,Cookie信息可以直接通过js来获取。

应用场景:

  1. 会话管理,记录登陆、购物车、游戏得分或者服务器应该记住的其他内容。
  2. 个性化,记录用户偏好、主题或者其他设置。
  3. 追踪,记录和分析用户行为。

localStorage

持久性存储。

优点

  • 容量大。localStorage 的容量上限为5M,当然这个 5M 是针对一个域名的,因此对于一个域名是持久存储的。
  • 只存在客户端,默认不参与与服务端的通信。
  • 接口封装。通过localStorage暴露在全局,并通过它的 setItem 和 getItem等方法进行操作。

应用场景

  1. 存储状态,基本信息等。

sessionStorage

会话性存储。生命周期是当前标签页关闭(即刷新页面还会存在,页面关闭不存在)。

优点

同localStorage

应用场景

  1. 可以用它对表单信息进行维护,将表单信息存储在里面,可以保证页面即使刷新也不会让之前的表单信息丢失。
  2. 存储本次浏览记录。

IndexedDB

运行在浏览器中的非关系型数据库。

优点:

  1. 储存空间没有上限。
  2. 异步操作

应用场景

1.存储base64的图片。

详细

https://zhuanlan.zhihu.com/p/505031430