为 egg 提供 cookie 操作的封装。
ctx.cookies = new Cookies(ctx, keys[, defaultCookieOptions]);
ctx.cookies.get('key', 'value', options);
ctx.cookies.set('key', 'value', options);
初始化时需要传递 Array 类型 的keys 参数,否则无法使用 cookies 的 signed
和 encrypt
功能。
每次设置或读取 signed cookie 或者 encrypt cookie 的时候,会用 keys 进行加密。每次加密都通过 keys 数组的第一个 key 进行加密,解密会从先到后逐个 key 尝试解密。读取 signed cookie 时,如果发现不是用第一个 key 进行加密时,会更新签名为第一个 key 加密的值。读取 encrypt cookie 时不会进行更新操作。
全局默认配置:
- autoChips -
Boolean
是否开启 CHIPS 的自动适配方案, 会自动给 Cookie 新增一个_CHIPS-
为前缀的分区 Cookie,优先读取非分区 Cookie,读取失败则尝试读取_CHIPS-
前缀的同名 Cookie 适配三方 Cookie 禁止逻辑。 一旦cookies.set
设置partitioned=true
,那么会强制忽略autoChips
参数。
通过 cookies.set(key, value, options)
的方式来设置一个 cookie。其中 options 支持的参数有:
- path -
String
cookie 的有效路径,默认为/
。 - domain -
String
cookie 的有效域名范围,默认为undefined
。 - expires -
Date
cookie 的失效时间。 - maxAge -
Number
cookie 的最大有效时间,如果设置了 maxAge,将会覆盖 expires 的值。 - secure -
Boolean
是否只在加密信道中传输,注意,如果请求为 http 时,不允许设置为true
,https 时自动设置为true
。 - partitioned -
Boolean
是否设置独立分区状态(CHIPS)的 Cookie。注意,只有secure
为true
的时候此配置才会生效。 - removeUnpartitioned -
Boolean
是否删除非独立分区状态的同名 cookie。注意,只有partitioned
为true
的时候此配置才会生效。 - httpOnly -
Boolean
如果设置为true
,则浏览器中不允许读取这个 cookie 的值。 - overwrite -
Boolean
如果设置为true
,在一个请求上重复写入同一个 key 将覆盖前一次写入的值,默认为false
。 - signed -
Boolean
是否需要对 cookie 进行签名,需要配合 get 时传递 signed 参数,此时前端无法篡改这个 cookie,默认为true
。 - encrypt -
Boolean
是否需要对 cookie 进行加密,需要配合 get 时传递 encrypt 参数,此时前端无法读到真实的 cookie 值,默认为false
。 - priority -
String
表示 cookie 优先级的字符串,可以设置为'low'
,'medium'
,'high'
,默认为undefined
。A Retention Priority Attribute for HTTP Cookies
通过 cookies.get(key, value, options)
的方式来读取一个 cookie。其中 options 支持的参数有:
- signed -
Boolean
是否需要对 cookie 进行验签,需要配合 set 时传递 signed 参数,此时前端无法篡改这个 cookie,默认为 true。 - encrypt -
Boolean
是否需要对 cookie 进行解密,需要配合 set 时传递 encrypt 参数,此时前端无法读到真实的 cookie 值,默认为 false。
通过 cookie.set(key, null)
来删除一个 cookie。如果传递了 signed
参数,签名也会被删除。
Made with contributors-img.