0

0

BOM中如何操作浏览器的本地存储?

星降

星降

发布时间:2025-07-04 21:26:02

|

332人浏览过

|

来源于php中文网

原创

localstorage与sessionstorage的核心差异在于数据生命周期和作用域。1. localstorage存储的数据是持久化的,除非手动清除,否则始终存在;2. sessionstorage则仅在当前浏览器会话期间有效,关闭标签页后数据会被清除;3. 两者均遵循同源策略、只能存储字符串,并共享相同的api;4. 选择依据为数据是否需要长期保留:长期用localstorage,临时用sessionstorage。此外,使用时需注意:5. 存储复杂数据类型时需用json.stringify()转换;6. 存储容量有限,大量数据应选用indexeddb;7. 数据不加密,不应存储敏感信息;8. 操作同步,可能影响性能。其他浏览器存储方案包括:9. cookies适合服务器交互的会话管理;10. indexeddb适合结构化大数据存储;11. cache api适合资源缓存和离线pwa应用。

BOM中如何操作浏览器的本地存储?

操作浏览器本地存储,我们主要依赖BOM(Browser Object Model)提供的localStoragesessionStorage这两个全局对象。它们都属于Web Storage API的一部分,让前端开发者能在用户浏览器端以键值对的形式存储少量数据,实现客户端的数据持久化。

BOM中如何操作浏览器的本地存储?

解决方案

在浏览器里,localStoragesessionStorage用起来其实非常直观,它们暴露了一套几乎完全相同的API。核心就是存、取、删、清空这几步。

BOM中如何操作浏览器的本地存储?

比如说,你想存个用户的偏好设置,比如主题模式:

// 存储数据
localStorage.setItem('themeMode', 'dark');

// 获取数据
const currentTheme = localStorage.getItem('themeMode');
console.log('当前主题:', currentTheme); // 输出:当前主题: dark

// 移除某个数据项
localStorage.removeItem('themeMode');

// 清空所有本地存储的数据(慎用,会清掉当前域名下所有localStorage数据)
// localStorage.clear();

sessionStorage的用法也一模一样,你只需要把上面的localStorage换成sessionStorage就行。但它们背后的逻辑和生命周期差异巨大,这才是关键。记住一点:它们都只能存储字符串。如果你想存对象或数组,得先用JSON.stringify()转换成字符串,取出来再用JSON.parse()转回去。这算是个小常识,但总有人会忘。

BOM中如何操作浏览器的本地存储?
// 存储一个对象
const userInfo = { name: '张三', age: 30 };
localStorage.setItem('userProfile', JSON.stringify(userInfo));

// 获取并解析对象
const storedUser = JSON.parse(localStorage.getItem('userProfile'));
console.log(storedUser.name); // 输出:张三

localStoragesessionStorage 究竟有何异同,我该如何选择?

这两兄弟,API长得一模一样,都是简单的键值对存储,都遵循同源策略(即不同域名下的页面无法互相访问对方的存储数据),且存储容量相对较大(通常是5MB到10MB,具体取决于浏览器)。但它们的“寿命”和“作用域”却截然不同,这直接决定了你在什么场景下该用谁。

localStorage,我个人觉得它更像一个“永久”的抽屉。一旦数据存进去,除非你手动删除,或者用户清空浏览器缓存,否则它会一直存在。即使你关闭浏览器,电脑重启,下次再打开同一个网站,数据依然在那里。这使得它非常适合存储那些需要长期保留的用户偏好、离线数据缓存、或者一些不那么敏感的身份令牌(当然,令牌通常有过期时间,需要自行管理)。

sessionStorage,对我来说,它更像一个“临时”的文件夹。它的生命周期与浏览器会话(或者说,单个浏览器标签页)紧密绑定。一旦你关闭了当前的标签页或浏览器窗口,sessionStorage里的数据就会被清空。如果你在一个标签页里打开了网站A,存了些数据到sessionStorage,然后又在新标签页里打开了网站A,这两个标签页的sessionStorage是独立的,互不影响。这让它非常适合存储那些只在当前会话中有效的数据,比如用户在某个表单中输入了一半的数据,或者单页应用(SPA)中临时的UI状态。我常用来做表单数据暂存,避免用户误触刷新后数据丢失,体验会好很多。

选择上,其实很简单:如果你需要数据在用户关闭浏览器后依然存在,那就用localStorage;如果数据只在当前会话中有效,关闭标签页就应该消失,那么sessionStorage就是你的不二之选。别把敏感信息直接扔进去,这俩都不是为安全而生的。

操作本地存储时,有哪些常见的“坑”和注意事项?

虽然Web Storage API用起来很方便,但实际开发中还是有一些“坑”和需要注意的地方,否则可能会踩雷。

PathFinder
PathFinder

AI驱动的销售漏斗分析工具

下载

一个很常见的“坑”就是前面提到的:只能存储字符串。如果你直接localStorage.setItem('myObject', {a:1}),取出来会发现它变成了"[object Object]",这显然不是你想要的。所以,记住JSON.stringify()JSON.parse()这对搭档,它们是处理复杂数据类型的好帮手。

再来聊聊存储容量限制。虽然5-10MB听起来不少,但如果你真的想把大量图片或视频数据base64编码后存进去,或者构建一个大型的离线应用,很快就会触及上限。一旦超出,浏览器会抛出QuotaExceededError错误。这时候,你可能就需要考虑更专业的本地数据库方案,比如IndexedDB。对我而言,localStorage更多是用来存一些配置项、少量文本数据,而不是作为大规模数据仓库。

安全性也是一个不容忽视的问题。localStoragesessionStorage的数据是完全暴露在客户端的,任何通过JavaScript注入(XSS攻击)的代码都能轻易地访问、修改甚至窃取这些数据。所以,绝不能把用户的密码、支付信息或者其他高度敏感的数据直接存储在这里。它们不是加密存储的,也不是为了安全而设计的。如果你的应用需要存储敏感信息,那应该考虑服务器端存储,并配合安全的身份验证机制。

还有一个细节点是,localStoragesessionStorage的操作都是同步的。这意味着当你调用setItemgetItem等方法时,JavaScript主线程会被阻塞,直到操作完成。对于存储少量数据来说,这几乎察觉不到,但如果你尝试存储或读取非常大的数据块,可能会导致页面出现短暂的卡顿,影响用户体验。虽然这种情况不常见,但如果你的应用确实有大量本地存储操作,这一点值得留意。

除了本地存储,浏览器还有哪些数据持久化的方案?它们各有什么应用场景?

除了localStoragesessionStorage,浏览器其实提供了好几种不同的数据持久化方案,每种都有其独特的优势和适用场景。了解它们能让你在面对不同需求时,做出更明智的技术选型。

Cookies:这是最古老也最广为人知的一种。它通常用于会话管理和用户身份识别。与Web Storage不同的是,Cookies会自动随HTTP请求发送到服务器,这既是它的优点(方便服务器识别用户),也是缺点(每次请求都会带上,增加了网络开销)。而且,Cookies的存储容量非常小(通常只有4KB),并且可以设置过期时间、作用域(路径和域名),甚至可以标记为HttpOnly(防止JavaScript访问,增加安全性)或Secure(只在HTTPS下发送)。我个人觉得,Cookies现在更多是用来处理服务器端会话和一些简单的跟踪信息,而不是作为前端大量数据的存储方案。

IndexedDB:如果说localStorage是简单的键值对存储,那IndexedDB就是浏览器里的一个“小型数据库”。它是一个功能强大的客户端存储系统,支持存储大量结构化数据(MB到GB级别),并且提供了索引、事务等数据库特性。它的操作是异步的,不会阻塞主线程,非常适合构建离线应用、存储大量用户生成的内容或复杂的缓存数据。比如,一个离线文档编辑器,或者一个需要缓存大量产品信息的电商应用,IndexedDB就是理想的选择。它的API相对复杂一些,但功能也强大得多。

Cache API (Service Workers):这个是与Service Worker紧密结合的,主要用于拦截网络请求并缓存资源,实现“离线优先”的体验。它允许开发者精细控制哪些网络请求的响应可以被缓存,以及如何从缓存中获取资源。这对于提升网站的加载速度、实现完全离线的PWA(Progressive Web App)至关重要。它不是用来存储业务数据的,而是用来管理网站的静态资源(HTML、CSS、JavaScript、图片等)和API响应的缓存。

总结一下,localStoragesessionStorage适合小量、简单的键值对存储;Cookies适合会话管理和少量服务器交互数据;IndexedDB适合大量、结构化的客户端数据存储;而Cache API则专注于优化网络资源加载和离线访问。在实际项目中,我们往往会根据具体的数据类型、生命周期和性能需求,组合使用这些不同的持久化方案。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

457

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

549

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

337

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

338

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

225

2025.10.31

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

138

2026.02.12

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

760

2023.08.03

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

37

2026.03.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.9万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

CSS教程
CSS教程

共754课时 | 42.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号