真实面经题目 · 原创解析
Cookie 有哪些常见属性?
Cookie 常见属性包括 Name、Value、Domain、Path、Expires、Max-Age、Secure、HttpOnly、SameSite、Priority、Partitioned 等。它们共同决定 Cookie 的内容、有效期、发送范围、安全边界和跨站行为,是登录态、个性化和安全防护中的基础机制。
真实面经题目 · 原创解析
Cookie 常见属性包括 Name、Value、Domain、Path、Expires、Max-Age、Secure、HttpOnly、SameSite、Priority、Partitioned 等。它们共同决定 Cookie 的内容、有效期、发送范围、安全边界和跨站行为,是登录态、个性化和安全防护中的基础机制。
回答 Cookie 属性时要区分三个维度:第一是基础内容,Name 和 Value 保存键值,Expires 或 Max-Age 决定持久时间;第二是作用范围,Domain 决定哪些域名可以收到,Path 决定哪些路径可以收到;第三是安全属性,Secure 要求只在 HTTPS 发送,HttpOnly 禁止 JavaScript 读取,SameSite 控制跨站请求是否携带,Priority 影响浏览器清理优先级,Partitioned 用于分区存储场景。面试中还要说明这些属性只是在浏览器侧控制发送和访问边界,真正的登录安全仍依赖服务端会话校验、CSRF 防护和令牌失效策略。
Cookie 的基本形态是 Name=Value。没有显式过期时间时,它通常是会话 Cookie,浏览器会在会话结束后清理;设置 Expires 或 Max-Age 后,它会成为持久 Cookie。Expires 是绝对过期时间,Max-Age 是相对秒数,二者同时出现时通常 Max-Age 优先。生命周期设计要和登录有效期、刷新策略和安全风险匹配。
Domain 决定 Cookie 可以发送到哪些主机。没有设置 Domain 时,通常只发给当前主机;设置为父域后,符合规则的子域也可能携带该 Cookie。这个属性影响很大,范围过宽会让更多子域接触到登录态,增加被低安全等级子系统牵连的风险。认证 Cookie 通常应尽量收窄域名范围。
Path 决定 URL 路径匹配范围,例如设置为 /account 时,匹配该路径及其下级路径的请求会携带 Cookie。Path 主要用于减少不相关请求携带 Cookie,不能当作强安全隔离,因为同源页面仍可能通过其他方式影响请求。真正的权限隔离不能只依赖 Path。
Secure 表示 Cookie 只通过 HTTPS 发送,避免明文链路泄露;HttpOnly 表示不能被 document.cookie 读取,可降低 XSS 窃取登录态的风险;SameSite 控制跨站请求携带策略,常见取值包括 Strict、Lax、None,其中 None 通常需要配合 Secure。安全属性要根据登录、支付、第三方嵌入和跨域跳转场景权衡。
Priority 可以提示浏览器在 Cookie 数量或体积超限时优先保留更重要的 Cookie。Partitioned 用于分区 Cookie,常见于第三方嵌入场景,让同一个第三方站点在不同顶级站点下拥有隔离的 Cookie 存储。随着浏览器隐私策略增强,跨站 Cookie 的默认行为越来越保守,系统设计不能假设第三方 Cookie 永远可用。
不能完全防住。HttpOnly 只是阻止脚本直接读取 Cookie,但 XSS 仍可能发起同源请求或操作页面。它是降低登录态被窃取的措施之一,不是替代输入过滤、内容安全策略和输出转义的方案。
Strict 更严格,跨站导航通常也不携带 Cookie,安全性更强但可能影响登录跳转体验。Lax 在部分顶级导航场景会携带 Cookie,更兼顾安全和可用性,很多站点会作为默认选择。
因为 None 允许跨站请求携带 Cookie,风险更高。浏览器要求它配合 Secure,可以确保这类 Cookie 至少只在 HTTPS 通道中发送,降低明文泄露风险。
Cookie 会自动随匹配请求发送,适合服务端会话,但要处理 CSRF 风险;LocalStorage 不会自动发送,却容易被 XSS 读取。登录态选择要结合前后端架构、攻击面和刷新机制,而不是只看存取方便。