Appearance
本地存储方案
放弃使用 Cookies
Cookies 目前有这些缺陷:
发送请求时会自动携带 Cookies,而且 JavaScript 无法阻止携带,造成网络流量白白浪费,而且增加泄露隐私风险。
业界新标准是请求头使用
Authorization
字段携带 Token,已经放弃了 Cookies。在使用Authorization
字段的前提下,Cookies 的作用只剩下存储 Token,由于 JS 操作 Cookies 无法使用 HttpOnly 特性,所以 Cookies 相对于 localStorage 并没有安全优势。浏览器的未来趋势是放弃 Cookies。
手机 APP 应用本身不支持 Cookies。
应使用 expired-storage 库
localStorage 和 sessionStorage 相对于 Cookies 有些优点,但也有一些缺点,所以我们采用expired-storage库来增强 localStorage 和 sessionStorage。
expired-storage 的主要增强能力是:
支持设置过期时间
支持 JSON 数据的读取和写入
用法:
js
import ExpiredStorage from 'expired-storage';
// 为防止被攻击者盲猜出键名,请使用一个复杂的键名
const TokenKey = 'xxxxxxx-Token';
const expiredStorage = new ExpiredStorage();
export function getToken() {
return expiredStorage.getItem(TokenKey);
}
// 设置 7 天有效期
export function setToken(token) {
return expiredStorage.setItem(TokenKey, token, 60 * 60 * 24 * 7);
}
export function removeToken() {
return expiredStorage.removeItem(TokenKey);
}