有奖捉虫:办公协同&微信生态&物联网文档专题 HOT
Cookies 提供了一组 cookie 操作接口。
注意:
Cookies 对象以 name + domain + path 为唯一 key, 管理 Cookie 对象集。

构造函数

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

参数

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

方法

get

cookies.get(name?: string): null | Cookie | Array<Cookie>;
获取指定名称的 Cookie 对象。存在多个 name 匹配时,返回 Cookie 数组。

参数

参数名称
类型
必填
说明
name
string
Cookie名称,取值说明如下。
缺省 name
表示获取所有 Cookie 对象。
指定 name
表示获取指定 name 的 Cookie 对象,存在多个匹配时,返回 Cookie 数组。
Cookie 对象属性如下,详细参见 MDN 官方文档 Set-Cookie
属性名
类型
只读
说明
name
string
Cookie 名称。
value
string
Cookie 值。
domain
string
Cookie的作用域名。
path
string
Cookie的作用路径。
expires
string
Cookie 最长有效时间, 取值符合 HTTP Date 首部标准。
max_age
string
Cookie 经过 max_age 秒失效,单位秒(s)。
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,表示添加成功,返回 false,表示添加失败(超过了 cookies 数量限制,详情参见 cookies 大小限制)。
注意
name + domain + path 为唯一 key,覆盖添加 Cookie。

参数

参数名称
类型
必填
说明
name
string
Cookie名称。
value
string
Cookie值。
Cookie
string
Cookie 属性配置项。

append

cookies.append(name: string, value: string, options?: Cookie): boolean;
追加 Cookie,用于相同 name, 多个 value 的场景。返回 true,表示添加成功,返回 false,表示添加失败(value 重复或超过了 cookies 数量限制,详情请参见 cookies 大小限制)。
注意
name + domain + path 为唯一 key 追加 Cookie。

remove

cookies.remove(name: string, options?: Cookie): boolean;
删除 Cookie。
注意
name + domain + path 为唯一 key 删除 Cookie。

参数

参数名称
类型
必填
说明
name
string
Cookie名称。
options
Cookie 属性配置项,其中属性 domian 和 path 可支持 *, 表示匹配所有。

使用限制

特殊字符自动转义

name 值包含字符 " ( ) , / : ; ? < = > ? @ [ ] \\ { }0x00~0x1F0x7F~0xFF 将被自动转义。
value 值包含字符 , , ; " \\0x00~0x1F0x7F~0xFF 将被自动转义。

cookies 大小限制

Cookie 属性 name 大小不超过 64B。
Cookie 属性 value, domain, path, expires, max_age, 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=.tencentcloud.com; samesite=.tencentcloud.com', true);

// 设置响应头 Set-Cookie
response.setCookies(cookies);

return response;
}

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

相关参考