阅读 635

浏览器缓存 storage(浏览器缓存怎么清除)

基础对比

  • cookie

    • 在同源的http请求中携带,在浏览器和服务器间来回传递

    • 数据存储大小一般不能超过4k

    • 设置的cookie过期时间之前一直有效

    • 在所有同源窗口中都是共享的

    • 适用于和服务端的交互,常用于存储身份信息,如authcode

  • localStorage

    • 持久化本地存储,除非主动删除,否则不会过期

    • 存储大小为5M或更大

    • 在所有同源窗口中都是共享的

    • 适用于长期登陆,判断用户是否已登陆;长期保存数据,可与vuex同步数据

  • sessionStorage

    • 同一个会话的页面才能访问,会话结束时会被清除,仅在当前浏览器窗口关闭前有效

    • 存储大小为5M或更大

    • 不在不同的浏览器窗口中共享

    • 适合敏感账号一次性登陆

  • 浏览器数据库 IndexDB

    • 浏览器提供的本地数据库,允许储存大量数据,提供查找接口,还能建立索引

    • 键值对储存,操作异步,支持事务

    • 存储空间大

无痕限制

问题描述:Safari 开启无痕模式后,localStorage 和 sessionStorage 对象本身是存在的,但对其进行 set 操作会报错。无痕模式下 cookie 是可以使用的。

报错信息:QuotaExceededError(code 为 22,存储空间已用完)。推测浏览器把 storage 的内存先清空,然后再设置最大值为 0导致的

解决方案:对 storage 进行一层封装,定义一个 window 的全局变量进行存储,实现如下所示:

// memoryStorage.js 自定义全局存储 function MemoryStorage() {   this._store = {}; } MemoryStorage.prototype.setItem = function (key, val) {   this._store[key] = String(val); }; MemoryStorage.prototype.getItem = function (key) {   return this._store.hasOwnProperty(key) ? this._store[key] : null; }; MemoryStorage.prototype.removeItem = function (key) {   delete this._store[key]; }; MemoryStorage.prototype.clear = function () {   this._store = {}; }; export default MemoryStorage; 复制代码

// sessionStorage.js 默认存储 import MemoryStorage from "./memoryStorage"; let sessionStorage; // 判断默认存储是否能用 if (navigator.cookieEnabled && window.sessionStorage) {   sessionStorage = window.sessionStorage; } else {   sessionStorage = new MemoryStorage(); } export default {   set(key, val) {     return sessionStorage.setItem(key, JSON.stringify(val));   },   get(key) {     const val = sessionStorage.getItem(key);     if (val === null) return null;     try {       return JSON.parse(val);     } catch (e) {       sessionStorage.removeItem(key);       return null;     }   },   remove(key) {     return sessionStorage.removeItem(key);   },   clear() {     return sessionStorage.clear();   }, };


作者:时光足迹
链接:https://juejin.cn/post/7031538650571948068


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐