首页 > 解决方案 > 在 cloudflare worker header.set('Set-Cookie' 函数的 'Set-Cookie' 标头中设置多个 cookie

问题描述

我正在尝试使用 cloudfare 工作人员将 2 个 cookie 键/值对添加到响应中,然后再将其发送到客户端。

不幸的是,cloudflare 工作人员的所有文档都说要使用 response.headers.set('Set-Cookie',xxx) 函数来设置 cookie 值:

let response = await fetch(request);
response = new Response(response.body, response);

response.headers.set('Set-Cookie', "val1=x; Expires=Wed, 21 Oct 2020 07:28:00 GMT; Path='/';");

return response;

这只允许您设置一个 cookie 标头,如果调用两次只会覆盖现有的标头。

我已经尝试调用该函数两次,只有最后一个值进来:

response.headers.set('Set-Cookie', "val1=1; Expires=Wed, 21 Oct 2020 07:28:00 GMT; Path='/';");
response.headers.set('Set-Cookie', "val2=2; Expires=Wed, 21 Oct 2020 07:28:00 GMT; Path='/';");

我尝试在一个标头中传递 2 个 cookie,用逗号分隔,但只有一个进入:

response.headers.set('Set-Cookie', "val1=1; Expires=Wed, 21 Oct 2020 07:28:00 GMT; Path='/';, val2=2; Expires=Wed, 21 Oct 2020 07:28:00 GMT; Path='/';");

我尝试传递 2 个 cookie 键/值对,但第一个键值设置为“1,val2=2”:

response.headers.set('Set-Cookie', "val1=1, val2=2; Expires=Wed, 21 Oct 2020 07:28:00 GMT; Path='/';");

这些都不起作用。

我发现的唯一解决方法是将变量捆绑到一个变量中,然后在客户端使用 JS 解包并应用变量:

response.headers.set('Set-Cookie', "jsVal={val1:1, val2:2}; Expires=Wed, 21 Oct 2020 07:28:00 GMT; Path='/';");

.. 然后在 js 文件中应用 2 个 cookie 值。显然这并不理想。

有没有人有幸通过 cloudflare 工作人员在一个响应标头中应用 2 个单独的 cookie?谢谢。

标签: cookieshttp-headerscloudflare-workers

解决方案


Headers.append()https ://developer.mozilla.org/en-US/docs/Web/API/Headers/append

set() 和 append() 的区别在于,如果指定的 header 已经存在并且接受多个值,set() 将用新值覆盖现有值,而 append() 会将新值追加到末尾一组值。


推荐阅读