用户退出登录之后按一下浏览器后退键,账户页和订单列表还能看到,非要清掉浏览器数据才恢复正常。日志里能对上时间点,这种反而好排。
账户页被当成普通页面缓存了,退出登录只清掉了服务端的会话,浏览器里面那份副本还原封不动留着,等于根本就没有退干净。这一点先确认清楚,后面就不用反复试。
location ~* /(account|orders|profile)/ {
add_header Cache-Control 'private, no-store' always;
}
「私有页被缓存」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。
改完顺手把文档补一句,省得下次自己重新推一遍。
处理上按这个顺序:账户类的路径全部禁止缓存,一个目录都别放过;退出登录的时候返回一个带着 no-store 头的跳转响应给浏览器;再确认 CDN 也没有存过这些页面,边缘那边要单独排掉。
结果对不对很好判断,退出之后按后退键只应该看到登录页,订单信息一条都不再出现。
