浏览器存储

108 阅读2分钟

web storage (HTML5引入的本地存储)

localStorage 和 sessionStorage 都非常适合缓存非敏感应用数据。可以在需要存储少量简单值并不经常访问它们是使用它们。它们本质上都是同步的,并且会阻塞主 UI 线程,所以应该谨慎使用。

localStorage 永久存储 除非用户主动删除 否则永远不会过期

sessionStorage 临时存储 页面重新加载仍然存在 但是关闭浏览器选项卡数据就会消失

缺点:

  • 最大支持5m的数据
  • 只能存储字符串
  • 容易被xss攻击不应该存储敏感数据
  • 操作都是同步的会阻塞主线程
  • web worker和service worker无法访问web storage

api

  • setItem(key, value) 设置
  • getItem(key) 获取
  • removeItem(key) 移除某个
  • clear() 清空
  • key(index) 通过索引获取键
  • length 长度

Cookie

Cookie 是最早被提出来的本地存储方式,在此之前,服务端是无法判断网络中的两个请求是否是同一用户发起的,为解决这个问题,Cookie 就出现了。Cookie 的大小只有 4kb,它是一种纯文本文件,每次发起 HTTP 请求都会携带 Cookie。

  • Cookie 一旦创建成功,名称就无法修改
  • Cookie 是无法跨域名的,也就是说 a 域名和 b 域名下的 cookie 是无法共享的,这也是由 Cookie 的隐私安全性决定的,这样就能够阻止非法获取其他网站的 Cookie
  • 每个域名下 Cookie 的数量不能超过 20 个,每个 Cookie 的大小不能超过 4kb
  • 有安全问题,如果 Cookie 被拦截了,那就可获得 session 的所有信息,即使加密也于事无补,无需知道 cookie 的意义,只要转发 cookie 就能达到目的
  • Cookie 在请求一个新的页面的时候都会被发送过去

如果需要域名之间跨域共享 Cookie,有两种方法:

  1. 使用 Nginx 反向代理
  2. 在一个站点登陆之后,往其他网站写 Cookie。服务端的 Session 存储到一个节点,Cookie 存储 sessionId

Cookie 的使用场景:

  • 最常见的使用场景就是 Cookie 和 session 结合使用,我们将 sessionId 存储到 Cookie 中,每次发请求都会携带这个 sessionId,这样服务端就知道是谁发起的请求,从而响应相应的信息。
  • 可以用来统计页面的点击次数