浏览器存储策略解析(三)Local/sessionStorage实战:如何查看本地浏览器上数据

物理意义上的localStorage/sessionStorage在哪里

我们都知道,localStorage存于本地,sessionStorage存于会话,这是见名知意可以得到的。但是在物理层面他们究竟存储在哪里呢?

localStorage和sessionStorage一样,是存储在用户本地计算机的硬盘上。在不同浏览器中,存储的位置不同

以chrome为例,所有的localStorage和sessionStorage在这个路径下:

C:\Users\用户名\AppData\Local\Google\Chrome\User Data\Default

打开看看

这就是localStorage/levelDb下的文件,其中存储的是以键值对形式存储的数据。每次使用的时候,内存上就是在这些地方进行存取的。

但是很可惜,不能直接打开看看里面存了什么。想要打开lb文件需要特殊的levelDB工具才行。

他俩是什么对象的属性呢?看这个内存路径,不能再一目了然了吧。

他们是存在于Window对象的 

window上的存储对象

学过js的朋友都知道,js的bom顶级对象就是windows,包含了与浏览器交互的所有对象。那么在js的角度,localstorage和sessionStorage就是在他身上的。

对象支持的方法

类似数据库,它基本支持这几种:增/删/改/查

增-存数据

windows.localStorage.setItem(键,值);
windows.sessionStorage.setItem(键,值);//windows也可以省略
localStorage.setItem(键,值);
sessionStorage.setItem(键,值);

即可存。

需要注意的是,它仅仅支持一个键和一个值一一对应,其中键和值都 只能是 字符串类型。

那如果我要存储一个对象类型的数据呢?

很简单,用jQuery转化一下就行了。

const men = {height: 180,weight: 70
}
sessionStorage.setItem(key, JSON.stringify(men));

当然,如果你觉得这么些可能不够优美,也可以将这个方法封装处理一下

// 1. 创建men对象
const men = {height: 180,weight: 70
}// 2. jQuery风格的封装
const $ = {// 存储方法setStorage: function(key, value) {if (typeof value === 'object') {value = JSON.stringify(value);}localStorage.setItem(key, value);return this;  // 返回this实现链式调用},// 获取方法getStorage: function(key) {let value = localStorage.getItem(key);try {return JSON.parse(value);} catch(e) {return value;}},// 删除方法removeStorage: function(key) {localStorage.removeItem(key);return this;}
}// 3. 使用示例
// 存储数据
$.setStorage('menInfo', men);// 获取数据
const getMen = $.getStorage('menInfo');
console.log(getMen);  // {height: 180, weight: 70}// 链式调用示例
$.setStorage('menInfo', men).setStorage('otherKey', 'otherValue').removeStorage('otherKey');// 存储多个数据
$.setStorage('user1', {height: 175, weight: 65}).setStorage('user2', {height: 182, weight: 75});// 获取数据
const user1 = $.getStorage('user1');
console.log(user1.height);  // 175

查-看数据

既然是字符串肯定是类似字典存储的。所以无论是sessionStorage还是localStorage取得值的形式都是用键去查。

localStorage.getItem(键);
sessionStorage.getItem(键);

 当然了取的时候直接取出来的也是json字符串形式,是需要转化的。

这里的改数据就相当于将原来那个键所对应的值覆盖掉了。而对于字典或类似字典的数据来说,键是微医的,所以这里就相当于增数据了。

三种写法

localStorage.setItem(键,值);
localStorage[键]=值
localStorage.键=值

感谢伟大的简洁的js,这要是用c++写的用起来就痛苦多了。

依旧是三种写法 

localStorage.removeItem(键);
delete localStorage[键];
delete localStorage.键

实战演练

这个时候我们就会想到,我怎么知道存了哪些数据进去?总不能下个文件解析器每次都从磁盘里找吧。这个时候,我们的控制台就有大用了。

打开应用选项我们就能看见,哇,localStorage&sessionStorage。

打开一个看一下

可以看见,他会根据你的网址将你此时存储下来的localStorage/sessionStorage以键值对展示出来,可以说是一目了然。甚至还贴心的提供了过滤,清除等选项。有了这个再也不怕闭着眼睛乱存啦。

localStorage/sessionStorage缺点

和cookie相比他们已经好太多了,但是它的缺点也是很致命的:还是太原始了一点,网站一多,数据结构一复杂,就难以招架了。特别是localStorage是本地数据,也就是你如果不手动给localStorage写一个过期时间,不把他清理掉,他就会永远,永远,永永远远的留在你的硬盘里。这往往会导致一些鸡零狗碎的问题,比如说数据过期,版本控制不兼容,存储冗余庞杂,甚至信息泄露。当然这些我们可以在代码里手动用定时器等方式设置过期时间,但是他们都面临这同一个问题:太不优美了。

所以,我们当然是有更好的更现代化的工具选择的:indexDB。下一章我们来讲讲indexDB。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/885078.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式讲解02—责任链模式(Chain)

1. 概述 定义:责任链模式是一种行为型模式,在这个模式中,通常创建了一个接收者对象的链来处理请求,该请求沿着链的顺序传递。直到有对象处理该请求为止,从而达到解耦请求发送者和请求处理者的目的。 解释:责…

判断二叉搜索树(递归)

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。binary search tree (BST) 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 …

私有化视频平台EasyCVR海康大华宇视视频平台视频诊断技术是如何实时监测视频质量的?

在现代视频监控系统中,确保视频流的质量和稳定性至关重要。随着技术的进步,视频诊断技术已经成为实时监测视频质量的关键工具。这种技术通过智能分析算法对视频流进行实时评估和处理,能够自动识别视频中的各种质量问题,并给出相应…

大语言模型(LLM)量化基础知识(一)

请大家关注我的知乎博客:- 派神 - - 知乎 随着大型语言模型 (LLM) 的参数数量的增长,与其支持硬件(加速器内存)增长速度之间的差距越来越大,如下图所示: 上图显示,从 2017 年到 2022 年,语言模…

【comfyui教程】ComfyUI 现已支持 Stable Diffusion 3.5 Medium!人人都能轻松上手的图像生成利器

前言 ComfyUI 现已支持 Stable Diffusion 3.5 Medium!人人都能轻松上手的图像生成利器 大家翘首以盼的Stable Diffusion 3.5 Medium模型终于来了!就在今天,Stability AI 正式推出了这款“亲民版”平衡模型,让创作者们得以在消费…

大模型微调技术 --> LoRA 系列之 AdaLoRA

AdaLoRA 1.摘要 之前的微调方法(如低秩更新)通常将增量更新的预算均匀地分布在所有预训练的权重矩阵上,并且忽略了不同权重参数的不同重要性。结果,微调结果不是最优的。 为了弥补这一差距,我们提出了AdaLoRA,它根据权重矩阵的…

带你搞懂红黑树的插入和删除

文章目录 1. 红黑树1.1 红黑树的概念1.2 红黑树的性质1.3 红黑树节点的定义1.4 红黑树的插入找到插入的位置调节平衡 1.5 红黑树的删除删除节点平衡调整 1.6 红黑树和AVL树的比较 1. 红黑树 1.1 红黑树的概念 红黑树也是一种二叉搜索树,但是在每一个节点上增加了一个存储位表…

揭秘全向轮运动学:机动艺术与上下位机通信的智慧桥梁

✨✨ Rqtz 个人主页 : 点击✨✨ 🌈Qt系列专栏:点击 🎈Qt智能车上位机专栏: 点击🎈 本篇文章介绍的是有关于全向轮运动学分析,单片机与上位机通信C代码以及ROS里程计解算的内容。 目录 大纲 ROS(机器人操作系统&…

移远通信推出八款天线新品,覆盖5G、4G、Wi-Fi和LoRa领域

近日,全球领先的物联网整体解决方案供应商移远通信宣布,再次推出八款高性能天线新品,进一步丰富其天线产品阵容,更好地满足全球客户对高品质天线的更多需求。具体包括5G超宽带天线YECT005W1A和YECT004W1A、5G天线YECT028W1A、4G天…

【设计模式系列】桥接模式(十三)

一、什么是桥接模式 桥接模式(Bridge Pattern)是一种结构型设计模式,其核心目的是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式主要用于处理那些在设计时无法确定实现细节的场合,或者需要在多个实现之间…

Java多态和继承(下篇)

今天接着学习多态和继承 目录 1 继承1.1 再谈初始化1.2 protect关键字1.3 继承方式1.4 final 关键字1.5 组合 2 多态2.1 多态的概念2.2 多态实现条件2.3 重写2.4 向上转型和向下转型2.4.1 向上转型2.4.2 向下转型 2.5 多态的优缺点2.6 避免在构造方法中使用重写的方法 总结 1 继…

动态规划理论基础和习题【力扣】【算法学习day.25】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴&am…

数据结构之顺序表(C语言)

1 线性表 线性表是n个具有相同特性的数据元素的有限序列,是一种在实际中广泛应用的数据结构,常见的线性表有:顺序表、链表、栈、队列、字符串等。 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是…

Qt——窗口

一.窗口概述 Qt 窗口是通过 QMainWindow 类来实现的。 QMainWindow是一个为用户提供主窗口程序的类,继承QWidget类,并且提供一个预定义的布局。包含一个菜单栏(menu bar),多个工具栏(tool bars&#xff0…

长亭那个检测能力超强的 WAF,出免费版啦

告诉你们一个震撼人心的消息,那个检测能力超强的 WAF——长亭雷池,他推出免费社区版啦,体验地址见文末。 八年前我刚从学校毕业,在腾讯做安全研究,看到宇森在 BlackHat 上演讲的议题 《永别了,SQL 注入》 …

漏洞分析 | Spring Framework路径遍历漏洞(CVE-2024-38816)

漏洞概述 VMware Spring Framework是美国威睿(VMware)公司的一套开源的Java、JavaEE应用程序框架。该框架可帮助开发人员构建高质量的应用。 近期,网宿安全演武实验室监测到Spring Framework在特定条件下,存在目录遍历漏洞&…

tp接口 入口文件 500 错误原因

一、描述 二、可能的原因 1、runtime目录没权限 2、关闭了Tp记录日志的功能 3、关闭debug调试模式 4、关闭了debug模式还是报错 一、描述 Thinkphp项目本地正常,上传到线上后静态文件访问正常,访问tp接口报500错误。 经调试发现,在php入…

第07章 运算符的使用

一、算数运算符 算术运算符主要用于数学运算,其可以连接运算符前后的两个数值或表达式,对数值或表达式进行加 ()、减(-)、乘(*)、除(/)和取模(%&a…

十七 MyBatis的注解式开发

十七、MyBatis的注解式开发 mybatis中也提供了注解式开发方式,采用注解可以减少Sql映射文件的配置。 当然,使用注解式开发的话,sql语句是写在java程序中的,这种方式也会给sql语句的维护带来成本。 官方是这么说的: 使…

用 Python 写了一个天天酷跑(附源码)

Hello,大家好,给大家说一下,我要开始装逼了 这期写个天天酷跑玩一下叭! 制作一个完整的“天天酷跑”游戏涉及很多方面,包括图形渲染、物理引擎、用户输入处理、游戏逻辑等。由于Python是一种高级编程语言,…