SessionStorage适合临时购物车场景,仅存商品ID、数量、单价(单位分)、规格等必要字段,统一用"cart_temp"键存取数组,结算后及时清空,并注意多标签页隔离及JSON异常处理。

SessionStorage 适合在购物车临时结算中保存用户本次会话的选品数据,关掉页面就清空,不跨标签页,天然契合“临时结算”场景。
只存关键商品信息,别存整个对象
SessionStorage 只支持字符串,存对象要 JSON.stringify,取出来要 JSON.parse。但别把商品完整对象(比如含图片 URL、描述、库存状态)全塞进去——既浪费空间,又可能因对象引用或函数导致序列化失败。只存结算必需字段:
- 商品 ID(唯一标识,后续请求接口用)
- 数量(number 类型,存前转成整数)
- 单价(建议存原始数字,避免小数精度问题,如 29.99 存为 2999,单位分)
- 规格/选项 ID(如颜色、尺寸,用字符串或数组)
用统一 key 管理购物车数据
不要为每个商品单独 setItem,而是把整个临时购物车存成一个数组,用固定 key,比如 "cart_temp":
// 添加商品
const cart = JSON.parse(sessionStorage.getItem("cart_temp") || "[]");
cart.push({ id: "1001", qty: 2, price: 2999, spec: "black-s" });
sessionStorage.setItem("cart_temp", JSON.stringify(cart));
// 读取时直接解析
const tempCart = JSON.parse(sessionStorage.getItem("cart_temp") || "[]");
这样增删改查逻辑集中,也方便在结算页统一校验、去重或合并相同商品。
立即学习“Java免费学习笔记(深入)”;
结算前校验 + 清空时机要明确
用户点击“去结算”后,通常需要跳转到新页面(如订单确认页)。这时要主动清空 sessionStorage,避免用户返回再点结算时重复提交:
- 跳转前调用 sessionStorage.removeItem("cart_temp")
- 如果结算页仍需显示临时商品(比如确认页回退还能看到),可不清空,但要在页面卸载前(beforeunload)或离开时清理
- 务必在结算接口成功响应后才清空,防止网络失败导致数据丢失
注意多标签页隔离特性
SessionStorage 是标签页级的,用户新开一个标签页加购,不会影响原标签页的临时购物车。这对“临时结算”反而是优势:用户边逛边比价、开多个商品页,各自结算互不干扰。但也要提醒用户——如果想跨页面汇总,就得换 localStorage 或后端方案,SessionStorage 不负责这个。
不复杂但容易忽略:每次读写都加 try-catch,避免 JSON 解析失败导致脚本中断。


















