curl -sI https://example.com/api/login -X POST | grep -iE 'set-cookie|cache-control|x-cache'

登录接口偶发返回别人的 session,抓包看到响应头里的 Set-Cookie 值和上一个用户相同,CDN 的 X-Cache 显示 Hit。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:源站没写 private 或 no-store,CDN 按普通响应缓存了下来。后来的请求直接拿到这份带 Set-Cookie 的响应,会话就被复用了。这类响应本来就不该进共享缓存。

「Set-Cookie 被缓存」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。同一份配置存在多处的,先确认改的是被加载的那一份。

新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

处理上按这个顺序:登录和用户相关接口加 Cache-Control: private, no-store;CDN 上配置忽略带 Set-Cookie 的响应;刷新边缘缓存 清掉已经存下的那份;用两个不同账号交叉请求验证会话是否隔离。

确认没问题再收工,登录响应 X-Cache 显示 Miss 且不落缓存 两个账号请求拿到的 session 各自独立。

作者 9823189