用户从邮件里的活动链接点进详情页,右上角显示未登录,手动刷新一下又好了。支付回跳页同样丢登录,客服每天收到几条反馈。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,会话 Cookie 设了 SameSite=Strict,从外部站点跳进来时浏览器不发这个 Cookie,服务端当成新访客处理。站内跳转才带得上,所以本机测不出来。
「SameSite 登录失效」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。改完顺手把文档补一句,省得下次自己重新推一遍。
setcookie('sid', $v, [
'samesite' => 'Lax',
'secure' => true,
'httponly' => true
]);
监控和日志的时间要对上,时区不一致会多绕很大一圈。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
具体做法是,会话 Cookie 改成 SameSite=Lax,站内跳转和 GET 导航都能带上,跨站 POST 仍然拦着;确实需要跨站提交的场景单独开一个 Cookie,别把会话 Cookie 放成 None;改完把支付回跳和邮件链接各走一遍。
最后用这个标准收尾,从邮件链接直接打开详情页,右上角显示已登录,支付回跳后会话也没丢。
