Cookies

更新时间:2024-08-14 19:50:30

Cookies 对象提供了一组用于操作 HTTP Cookie 的接口。它以 name + domain + path 作为唯一键来管理 Cookie 对象集,并提供添加、获取、删除 Cookie 等功能。

构造函数

const cookies = new Cookies(cookieStr?, isSetCookie?);

参数:

参数名称 类型 必填 说明
cookieStr string 否 Cookie 字符串或 Set-Cookie 字符串。
isSetCookie boolean 否 指示 cookieStr 参数是否为 Set-Cookie 字符串。默认为 false。

方法

get

cookies.get(name?): null | Cookie | Array<Cookie>;

获取指定名称的 Cookie 对象。如果存在多个匹配的 name,则返回一个 Cookie 对象数组。

参数:

参数名称 类型 必填 说明
name string 否 Cookie 名称。如果省略 name 参数,则返回所有 Cookie 对象;如果指定 name 参数,则返回匹配的 Cookie 对象或数组。

Cookie 对象

Cookie 对象表示一个 HTTP Cookie,其属性与 Set-Cookie HTTP 头部字段定义的属性一致。 以下列出了 Cookie 对象的属性,更多详细信息请参考 MDN Set-Cookie 文档:

属性名 类型 只读 说明
name string 是 Cookie 名称。
value string 是 Cookie 值。
domain string 是 Cookie 的作用域名。
path string 是 Cookie 的作用路径。
expires string 是 Cookie 的过期时间,取值符合 HTTP Date 首部标准。
maxAge number 是 Cookie 的最大生存时间(以秒为单位)。
sameSite string 是 控制 Cookie 跨站请求伪造攻击 (CSRF) 的保护机制。
httpOnly boolean 是 禁止 JavaScript 访问 Cookie,仅限 HTTP 请求携带。
secure boolean 是 Cookie 仅限 HTTPS 请求协议携带。

set

cookies.set(name: string, value: string, options?: Cookie): boolean;

覆盖添加 Cookie。如果添加成功,则返回 true;如果添加失败(例如超过了 Cookie 数量限制),则返回 false。

注意: 以 name + domain + path 为唯一键,覆盖添加 Cookie。

参数:

参数名称 类型 必填 说明
name string 是 Cookie 名称。
value string 是 Cookie 值。
options Cookie 否 可选的 Cookie 属性配置项。

append

cookies.append(name: string, value: string, options?: Cookie): boolean;

追加 Cookie,适用于相同 name、多个 value 的场景。如果添加成功,则返回 true;如果添加失败(例如 value 重复或超过了 Cookie 数量限制),则返回 false。

注意: 以 name + domain + path 为唯一键,追加 Cookie。

remove

cookies.remove(name: string, options?: Cookie): boolean;

删除 Cookie。

注意: 以 name + domain + path 为唯一键,删除 Cookie。

参数:

参数名称 类型 必填 说明
name string 是 Cookie 名称。
options Cookie 否 可选的 Cookie 属性配置项,其中 domain 和 path 属性可以支持通配符 *,表示匹配所有。

使用限制

特殊字符自动转义

  • name 值中包含以下字符会被自动转义: " ( ) , / : ; < = > ? @ [ ] \ { }、0x00~0x1F、 0x7F~0xFF。
  • value 值中包含以下字符会被自动转义: ,、;、"、\、0x00~0x1F、0x7F~0xFF。

Cookie 大小限制

  • Cookie 属性 name 的大小不超过 64 字节。
  • Cookie 属性 value、domain、path、expires、maxAge、sameSite 的累计大小不超过 1KB。
  • Cookies 转义后所有字段的总长度不超过 4KB。
  • Cookies 中包含的 Cookie 对象总数不超过 64 个。

示例代码

function handleEvent(event) {
  const response = new Response('hello world');

  // 创建 Cookies 对象
  const cookies = new Cookies('ssid=helloworld; expires=Sun, 10-Dec-2023 03:10:01 GMT; path=/; domain=.example.com; samesite=.example.com', true);

  // 设置响应头 Set-Cookie
  response.headers.set('Set-Cookie', cookies.toString()); 

  return response;
}

addEventListener('fetch', (event) => {    
  event.respondWith(handleEvent(event));
});

相关参考

本篇文档内容对您是否有帮助?
有帮助
我要反馈
提交成功!非常感谢您的反馈,我们会继续努力做到更好!