A 账号加了三件商品退出,B 账号登录后购物车角标还是 3,点开全是 A 加的东西,结算页收货地址也是 A 的。清一次浏览器缓存才恢复。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

function clearCartLocal() {
  ['cart', 'cart_meta', 'checkout_addr'].forEach(function (k) {
    localStorage.removeItem(k);
  });
}
// 退出和登录成功时都调一次

购物车存在 Cookie 或 localStorage 的固定键里,退出时只清了服务端会话,没清本地这份。新账号登录后前端先读本地缓存,把上一个人的数据当成自己的。这一点先确认清楚,后面就不用反复试。

「购物车串账号」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

具体做法是,退出登录时同时清掉购物车相关的本地键,键名集中在一处维护;登录成功后用服务端购物车覆盖本地,别做合并;购物车接口按用户 ID 取,别信前端传上来的 cart_id;拿两个账号在同一浏览器来回切三次,看角标和结算页。

改完照着核一遍,B 登录后购物车是空的,结算页没有任何 A 的地址残留。

作者 9823189