1. 题目与使用场景
你维护一个被多个商户站点嵌入的客服组件。组件需要记住每个商户下的访客会话,但不能把同一用户在不同顶级站点的身份串联。浏览器可能按顶级站点和第三方来源隔离 cookie、localStorage、缓存和网络状态。
2. 面试官考察点
- 是否能准确区分“第三方来源相同”和“存储分区相同”。
- 是否理解 CHIPS 的适用范围、属性要求和数据隔离语义。
- 是否能为需要跨站未分区状态的场景设计明确授权和降级。
- 是否把隐私目标、可用性、登录体验和兼容性放在同一决策框架中。
3. 回答前需要澄清的问题
- 组件需要跨顶级站点共享什么,是否真的需要共享身份?
- 每个站点是否有自己的租户、用户和会话边界?
- 是否允许用户点击一次完成授权,还是必须无交互加载?
- 支持哪些浏览器和内嵌方式:iframe、弹窗还是顶级跳转?
4. 30 秒回答框架
用“数据边界—默认方案—授权例外—降级—验证”回答:
我先把会话键限定为顶级站点与组件来源的组合,默认使用带 Partitioned 属性的安全 cookie,让每个商户拥有独立会话。需要跨站登录时,改用顶级站点跳转完成一次明确授权,再把短期一次性凭证传回组件;若浏览器不支持目标能力,就退回无状态模式并提示用户登录。最后用不同顶级站点、清除站点数据和拒绝授权的测试矩阵验证不会串号。
5. 分步骤深入解答
第一步:定义分区键与数据分类
Google Privacy Sandbox 将第三方存储和通信按分区隔离;MDN 将这种状态隔离描述为降低跨站追踪能力的浏览器策略。先把数据分成三类:仅当前商户需要的会话、可公开缓存的静态资源、确实需要跨站身份的账户状态。第一类不应绕过分区。
第二步:用 CHIPS 保存每站点会话
CHIPS 允许第三方 cookie 选择分区存储。响应应使用 Partitioned; Secure,并满足浏览器对 cookie 的其他安全要求。这样,同一组件来源在商户 A 和商户 B 中拿到不同 cookie 罐,客服上下文不会自然跨站合并。CHIPS 解决的是“每个顶级站点各自保存状态”,不是“跨站共享登录”。
第三步:为跨站身份设计显式授权
如果业务真的需要同一账户在多个站点可见,使用顶级站点跳转或 Storage Access API 作为例外路径。Storage Access API 让第三方内容请求访问通常不可见的未分区状态;产品应解释用途、在合适时机请求,并准备拒绝后的替代体验。授权结果应短期、可撤销且绑定请求的顶级站点。
第四步:建立兼容与隐私验证矩阵
测试至少覆盖:支持 CHIPS 的浏览器、不支持分区 cookie 的浏览器、拒绝存储访问、用户清除站点数据、多个顶级站点同时打开,以及 iframe 被替换或导航后重新加载。断言包括 cookie 是否串站、会话是否可恢复、授权是否重复提示和无状态模式是否仍能完成核心动作。
6. 高质量示范回答
我会先问清楚客服组件是否真的需要跨商户识别同一用户。默认答案是不需要:每个商户的会话应该独立,跨站串联会带来隐私和合规风险。
>
实现上,我让组件服务端设置 Partitioned; Secure cookie。浏览器会按顶级站点和组件来源形成独立的存储分区,所以用户在商户 A 的会话不会出现在商户 B。静态脚本和图片可以走普通缓存,但不把身份放进可跨站读取的共享状态。
>
对确实需要统一账户的场景,我提供“登录”按钮,点击后跳到账户顶级页面完成认证,再用短期一次性 code 回到原商户。若浏览器支持 Storage Access API,也可以在用户操作后请求未分区状态;用户拒绝或浏览器不支持时,组件退回每站点匿名会话和顶级登录。验收时我会用两个顶级站点、清除单站点数据和拒绝授权的组合测试,确认不会串号、不会无限重复弹授权,并记录分区命中率与登录失败率。
7. 常见错误
- 把 CHIPS 当成跨站共享 cookie,忽略它的核心语义是分区。
- 把所有状态都改成未分区访问,扩大追踪面和故障面。
- 只讨论 Chrome,不验证 Firefox、Safari 或能力检测失败路径。
- 在 iframe 加载时静默请求授权,没有用户动作、解释和拒绝后的替代方案。
- 用长效 token 直接拼在回跳 URL 中,造成日志、历史记录或 referrer 泄露。
8. 追问及应对
追问一:为什么不把用户 ID 放进顶级站点的 URL?
URL 可能进入日志、历史记录、分析系统和 referrer。应使用短期一次性 code,并在服务端交换为受约束的会话。
追问二:CHIPS cookie 何时会让用户“看起来登出了”?
用户首次进入新的顶级站点时,该站点拥有新的分区 cookie;这属于设计上的隔离。产品应提供清晰的顶级登录流程,而不是尝试读取其他站点的 cookie。
追问三:Storage Access API 被拒绝时怎样保持核心功能?
把跨站身份设为增强能力,匿名客服、帮助文档和本地商户会话仍可工作;当用户需要历史账户数据时,再引导顶级登录。