Skip to content
On this page

本地存储方案

放弃使用 Cookies

Cookies 目前有这些缺陷:

  1. 发送请求时会自动携带 Cookies,而且 JavaScript 无法阻止携带,造成网络流量白白浪费,而且增加泄露隐私风险。

  2. 业界新标准是请求头使用Authorization字段携带 Token,已经放弃了 Cookies。在使用Authorization字段的前提下,Cookies 的作用只剩下存储 Token,由于 JS 操作 Cookies 无法使用 HttpOnly 特性,所以 Cookies 相对于 localStorage 并没有安全优势。

  3. 浏览器的未来趋势是放弃 Cookies。

  4. 手机 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);
}

杨亮的前端解决方案