1. 简介

Cookie 是服务器提供的一种用于维护会话状态信息的数据,通过服务器发送到浏览器,浏览器保存在本地;当下一次有同源的请求时,将保存的 cookie 值添加到请求头部发送给服务端。这可以用来实现记录用户登录状态等功能。

Cookie 一般可以存储 4KB 大小的数据,只能被同源的网页共享访问。

服务器端使用 Set-Cookie 响应头配置 cookie 信息。一条 Cookie 包括 9 个属性值:

属性说明
name / valueCookie 的名字和值
expiresCookie 失效时间
domain域名
path路径
secure只在确保安全的情况下传输(HTTPS)
HttpOnly只能被服务器访问,不能用 JS 访问
SameSite限制第三方 cookie,防止 CSRF 攻击
PriorityChrome 提案,定义 cookie 优先级(低优先级 cookie 在超限时优先清除)

在跨域 XHR 请求中,即使是同源下的 cookie,也不会被自动添加到请求头,除非显式设置 withCredentials 或服务器明确允许。

document.cookie = 'username=John Doe';

设置过期时间(格式要求 GMT):

const date = new Date();
date.setTime(date.getTime() + expireHours * 3600 * 1000);

document.cookie = 'username=John; expires=' + date.toGMTString() + '; path=/';

path 告诉浏览器 cookie 的路径,默认属于当前页面。

将过期时间设置为过去(前一毫秒)即可:

const date = new Date();
date.setTime(date.getTime() - 1);

document.cookie = 'username=John Doe; path=/; expires=' + date.toGMTString();

4. 安全建议

  • 敏感信息(session token)务必设置 HttpOnly 和 Secure。
  • 用 SameSite=Lax 或 Strict 减少 CSRF。
  • Cookie 易被窃取 / 伪造,敏感操作不要只依赖 Cookie。

现代前端通常使用 HttpOnly Cookie 存 session token,前端通过自定义 Header 携带 token,避免 XSS 窃取。

来源整理自:我的有道云笔记