上一篇
html5本地存储
- 行业动态
- 2025-05-10
- 4
HTML5本地存储包括localStorage(持久存储)和sessionStorage(会话存储),均以键值对形式存储数据,支持JSON格式,数据存取速度快,无需网络请求,但需注意容量限制(约5MB)及敏感信息不宜存储,适用于离线数据
HTML5本地存储详解
基本概念
HTML5本地存储(Web Storage)是浏览器提供的客户端数据存储机制,允许在用户浏览器中持久化或临时保存数据,无需依赖服务器,数据以键值对形式存储,每个域名下的存储空间独立,不同浏览器可能有存储容量限制(通常约5MB)。
存储类型对比
类型 | localStorage | sessionStorage | 特点 |
---|---|---|---|
持久性 | 永久存储(除非手动清除) | 会话级存储(标签页关闭后清除) | 适合长期保存配置、用户偏好等 |
数据共享范围 | 同源的所有窗口/标签页共享 | 仅当前窗口/标签页可见 | 跨标签页通信需用storage 事件 |
API方法 | setItem() getItem() removeItem() | 同上 | 使用方法与localStorage 完全一致 |
常用API方法
方法 | 说明 | 示例 |
---|---|---|
setItem(key, value) | 存储键值对,值会被自动转为字符串 | localStorage.setItem('name', 'Alice'); |
getItem(key) | 根据键名获取值,返回字符串或null | const name = localStorage.getItem('name'); |
removeItem(key) | 删除指定键的数据 | localStorage.removeItem('name'); |
clear() | 清空所有存储数据 | localStorage.clear(); |
key(index) | 按索引获取键名(从0开始) | const firstKey = localStorage.key(0); |
IndexedDB补充说明
- 适用场景:存储大量结构化数据(如数据库表)或二进制文件。
- 特点:支持事务、索引、异步操作,容量远大于Web Storage(通常可达数百MB)。
- API复杂度:需使用
indexedDB.open()
创建连接,操作需通过事务(transaction
)执行。
实践示例:保存用户偏好
// 保存用户主题偏好 localStorage.setItem('theme', 'dark'); // 读取并应用偏好 const savedTheme = localStorage.getItem('theme'); if (savedTheme === 'dark') { document.body.classList.add('dark-mode'); } // 清除偏好设置 localStorage.removeItem('theme');
存储事件监听
storage
事件:当其他窗口/标签页修改localStorage
或sessionStorage
时触发。- 用途:实现跨标签页的实时数据同步。
- 示例:
window.addEventListener('storage', (event) => { console.log(`键${event.key}已更新,新值为${event.newValue}`); });
相关问题与解答
问题1:localStorage和cookie的区别是什么?
- 存储大小:localStorage约5MB,cookie通常仅4KB。
- 传输方式:cookie随每次HTTP请求发送到服务器,localStorage仅存于本地。
- 用途:cookie常用于会话管理或跟踪,localStorage适合离线数据缓存。
- 安全性:cookie可设置
HttpOnly
,localStorage数据易被JavaScript访问。
问题2:如何判断浏览器是否支持Web Storage?
直接尝试调用localStorage
或sessionStorage
的API,若抛出异常则不支持。
示例代码:
try { localStorage.setItem('test', 'support'); localStorage.removeItem('test'); // 支持则清除测试数据 console.log('Web Storage支持'); } catch (e) { console.log('Web Storage