如何在响应中同时发送 cookie 和重定向?(无服务器框架)

Vis*_*aju 2 javascript cookies node.js serverless-framework

下面是我用来在单个响应中设置 cookie 和重定向链接的代码,但只有其中一个可以工作。如果 statusCode 是 301/302,则重定向正在发生,但未设置 cookie。如果 statusCode 是 200 cookie 设置但重定向不起作用。有谁知道如何在单个请求中同时使用两者?我应该更改 StatusCode 某些状态代码不允许设置 cookie 吗?

const response = {
    statusCode: 302,
        headers: {
          "Access-Control-Allow-Origin" : "*",
          "Access-Control-Allow-Credentials" : true,
          "Set-Cookie": 'data='+data,
          "Location":"http://localhost:8040/#/dashboard",
        },
        body: JSON.stringify({
          message: data,
        }),
      };
      callback(null, response);
Run Code Online (Sandbox Code Playgroud)

我正在使用 nodejs 的无服务器框架。

这是响应的屏幕截图 在此处输入图片说明

但在 cookie 中注意是 der在此处输入图片说明

jfr*_*d00 6

浏览器不会接受与请求发送到的域完全不同的域的 cookie。因此,如果您要重定向到新域,则无法为该新域设置 cookie。

domaincookie部分仅适用于具有相同根域但仅在子域中不同的域。

这是取自RFC 6265

除非 Domain 属性为包含源服务器的 cookie 指定了一个范围,否则用户代理将拒绝 cookie。例如,用户代理将接受来自 foo.example.com 的域属性为“example.com”或“foo.example.com”的 cookie,但用户代理不会接受域属性为“bar.example.com”或“baz.foo.example.com”。

所以,回顾一下。您不能从您的服务器为完全不同的域设置 cookie,并且domaincookie 中的属性也不会保存您。在特殊情况下,您可以为不同的域设置 cookie,该 cookie 仅在子域中不同(例如共享相同的根域)。


仅供参考,如果您的 cookie 每个都正确设置,您必须更改此:

"Set-Cookie": 'data='+data,
Run Code Online (Sandbox Code Playgroud)

对此:

"Set-Cookie": 'data=' + JSON.stringify(data),
Run Code Online (Sandbox Code Playgroud)

正确序列化您的对象。