浏览器存储全指南
Web 浏览器提供了多种存储数据的方式,每种都有不同的用途和特点。
Cookies
设置和读取
// 设置 Cookie
document.cookie = 'username=John; expires=Fri, 31 Dec 2025 23:59:59 GMT; path=/';
// 读取 Cookie
console.log(document.cookie); // "username=John; session=xyz"
特点
- 有过期时间
- 可设置路径和域名
- 大小限制约 4KB
- 每次请求都会发送到服务器
LocalStorage
基本操作
// 存储
localStorage.setItem('name', 'John');
localStorage.setItem('user', JSON.stringify({ id: 1, email: 'john@example.com' }));
// 读取
const name = localStorage.getItem('name');
const user = JSON.parse(localStorage.getItem('user'));
// 删除
localStorage.removeItem('name');
// 清空所有
localStorage.clear();
特点
- 持久化存储(除非手动清除)
- 容量约 5-10MB
- 仅客户端访问
- 不随请求发送
SessionStorage
基本操作
// 用法与 LocalStorage 相同
sessionStorage.setItem('session', 'abc123');
const session = sessionStorage.getItem('session');
特点
- 仅在当前会话有效
- 标签页关闭后清除
- 容量约 5-10MB
IndexedDB
基本使用
// 打开数据库
const request = indexedDB.open('myDB', 1);
request.onupgradeneeded = function(event) {
const db = event.target.result;
const objectStore = db.createObjectStore('users', { keyPath: 'id' });
objectStore.createIndex('email', 'email', { unique: true });
};
request.onsuccess = function(event) {
const db = event.target.result;
// 添加数据
const transaction = db.transaction(['users'], 'readwrite');
const store = transaction.objectStore('users');
store.add({ id: 1, name: 'John', email: 'john@example.com' });
// 查询数据
const getRequest = store.get(1);
getRequest.onsuccess = function() {
console.log(getRequest.result);
};
};
特点
- 异步操作
- 支持事务
- 大容量存储
- 存储结构化数据
存储方式对比
| 方式 | 容量 | 过期时间 | 随请求发送 |
|---|---|---|---|
| Cookies | ~4KB | 可设置 | ✅ |
| LocalStorage | ~5-10MB | 永久 | ❌ |
| SessionStorage | ~5-10MB | 会话 | ❌ |
| IndexedDB | ~50MB+ | 永久 | ❌ |
选择建议
- Cookies - 需要发送到服务器的数据
- LocalStorage - 简单的键值对存储
- SessionStorage - 临时会话数据
- IndexedDB - 大量结构化数据
更多详情请参考 MDN Web Storage API