上一篇
html5存储数据的变量
- 行业动态
- 2025-05-03
- 2566
HTML5存储数据用localStorage、sessionStorage及IndexedDB,前者持久,后者会话级,IndexedDB
HTML5 存储数据的变量详解
localStorage
- 定义:浏览器提供的本地存储机制,数据持久化存储,除非手动清除或用户清除浏览器缓存。
- 特点:
- 数据在浏览器关闭后仍然存在。
- 以键值对(Key-Value)形式存储。
- 同一源(协议+域名+端口)下的所有页面共享数据。
- 容量限制约为 5MB(不同浏览器可能有差异)。
- API 方法:
localStorage.setItem(key, value)
:存储数据。localStorage.getItem(key)
:获取数据。localStorage.removeItem(key)
:删除指定键的数据。localStorage.clear()
:清空所有数据。
- 示例:
localStorage.setItem('username', 'John'); const name = localStorage.getItem('username'); // 返回 'John'
sessionStorage
- 定义:会话级存储,数据仅在当前页面会话中有效,标签页关闭后数据消失。
- 特点:
- 数据生命周期与页面标签页绑定。
- 容量限制与
localStorage
相同(约 5MB)。 - 适用于临时数据存储(如表单临时保存)。
- API 方法:与
localStorage
完全一致。 - 示例:
sessionStorage.setItem('tempData', 'test');
IndexedDB
- 定义:浏览器内置的 NoSQL 数据库,支持复杂数据存储(如二进制数据、结构化数据)。
- 特点:
- 支持事务操作(ACID 特性)。
- 容量上限高(通常数百 MB 至数 GB)。
- 异步 API,适合存储大量数据。
- 需手动管理数据库和对象仓库(Object Store)。
- API 方法:
- 创建/打开数据库:
indexedDB.open('dbName')
。 - 事务操作:
transaction.objectStore('storeName').add(data)
。
- 创建/打开数据库:
- 示例:
const dbRequest = indexedDB.open('myDatabase'); dbRequest.onsuccess = (event) => { const db = event.target.result; const transaction = db.transaction('users', 'readwrite'); const store = transaction.objectStore('users'); store.add({ id: 1, name: 'Alice' }); };
Cookie
- 定义:早期 Web 存储机制,由服务器设置,浏览器自动发送给服务器。
- 特点:
- 每次 HTTP 请求都会携带 Cookie。
- 容量限制小(约 4KB)。
- 可设置过期时间、路径、域名等属性。
- 常用于会话管理或用户偏好设置。
- API 方法:
document.cookie = 'key=value; expires=Date'
:设置 Cookie。document.cookie.split('; ')
:获取所有 Cookie。
- 示例:
document.cookie = 'token=abc123; max-age=3600'; // 1小时后过期
存储方式对比表
特性 | localStorage | sessionStorage | IndexedDB | Cookie |
---|---|---|---|---|
数据生命周期 | 永久(手动清除) | 会话级(标签页关闭) | 永久(手动清除) | 按过期时间或会话 |
作用域 | 同源所有页面 | 当前标签页 | 同源所有页面 | 当前域名所有页面 |
容量限制 | ~5MB | ~5MB | 数百 MB~数 GB | ~4KB |
API 复杂度 | 简单(同步) | 简单(同步) | 复杂(异步) | 简单(字符串操作) |
适用场景 | 持久化配置、用户数据 | 临时表单数据 | 大量结构化数据 | 会话管理、用户偏好 |
相关问题与解答
问题 1:如何选择 localStorage
、sessionStorage
和 IndexedDB
?
解答:
- 若需要长期保存数据(如用户偏好设置),选择
localStorage
。 - 若数据仅需当前会话临时使用(如未提交的表单),选择
sessionStorage
。 - 若需要存储大量或复杂结构数据(如文件、关系型数据),选择
IndexedDB
。
问题 2:如何清理 localStorage
中过期的数据?
解答:localStorage
本身不支持自动过期,需手动管理,常见方案:
- 存储时间戳:保存数据时记录时间,读取时检查是否超时。
const saveData = (key, value, ttl) => { const data = { value, expire: Date.now() + ttl }; localStorage.setItem(key, JSON.stringify(data)); }; const getData = (key) => { const data = JSON.parse(localStorage.getItem(key)); return data && data.expire > Date.now() ? data.value : null; };
- 定期清理:在应用启动时遍历
localStorage
,删除过期键