一、localStorage
和 sessionStorage
的基本概念
localStorage
:用于长期存储数据,即使关闭浏览器或重启计算机后仍然存在。适合保存用户设置、偏好等不需要频繁更新的信息。sessionStorage
:与localStorage
类似,但数据仅在当前会话期间有效,即当页面被关闭时数据会被清除。适用于临时性的会话信息,如购物车内容。
两者的主要区别在于数据的生命周期不同,因此在实际应用中可以根据需求选择合适的存储方式。
二、引入 js-cookie
管理 Cookies
js-cookie
是一个轻量级的 JavaScript 库,提供了简洁的 API 来读取、写入和删除 Cookies。相比于原生的 document.cookie
接口,js-cookie
更加易用且功能丰富,支持自动编码/解码、路径和域设置等功能。
三、构建统一的缓存管理工具
为了简化 localStorage
和 sessionStorage
的使用,并集成 js-cookie
对 Cookies 的操作,设计了两个模块:Local
和 Session
。每个模块都包含了四个核心方法:set
, get
, remove
, 和 clear
。此外,为了确保键名的一致性和可维护性,定义了一个 setKey
方法来为每个键添加前缀。
1. Local
模块 - 浏览器永久缓存
typescript
import Cookies from 'js-cookie';
/**
* window.localStorage 浏览器永久缓存
*/
export const Local = {
// 设置键名前缀
setKey(key: string) {
// @ts-ignore
return `${__NEXT_NAME__}:${key}`;
},
// 设置永久缓存
set<T>(key: string, val: T) {
window.localStorage.setItem(Local.setKey(key), JSON.stringify(val));
},
// 获取永久缓存
get(key: string) {
let json = <string>window.localStorage.getItem(Local.setKey(key));
return json ? JSON.parse(json) : null;
},
// 移除永久缓存
remove(key: string) {
window.localStorage.removeItem(Local.setKey(key));
},
// 移除全部永久缓存
clear() {
window.localStorage.clear();
},
};
2. Session
模块 - 浏览器临时缓存
typescript
/**
* window.sessionStorage 浏览器临时缓存
*/
export const Session = {
// 设置临时缓存
set<T>(key: string, val: T) {
if (key === 'token') return Cookies.set(key, val as string);
window.sessionStorage.setItem(Local.setKey(key), JSON.stringify(val));
},
// 获取临时缓存
get(key: string) {
if (key === 'token') return Cookies.get(key);
let json = <string>window.sessionStorage.getItem(Local.setKey(key));
return json ? JSON.parse(json) : null;
},
// 移除临时缓存
remove(key: string) {
if (key === 'token') return Cookies.remove(key);
window.sessionStorage.removeItem(Local.setKey(key));
},
// 移除全部临时缓存
clear() {
Cookies.remove('token');
window.sessionStorage.clear();
},
};
四、特殊处理 - token
的管理
在 Session
模块中,特别处理了 token
的存储和获取。由于 token
通常需要跨多个页面共享,并且可能涉及到安全性问题(如HTTPS),所以选择将其存储在 Cookies 中,而不是 sessionStorage
或 localStorage
。这样不仅可以保证 token
在不同页面之间的传递,还能利用 js-cookie
提供的安全特性,如设置 HttpOnly
和 Secure
标志。