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

Javascript 如何在响应中同时发送cookie和重定向?(无服务器框架),javascript,node.js,cookies,serverless-framework,Javascript,Node.js,Cookies,Serverless Framework,下面是我用来在一个响应中设置cookie和重定向链接的代码,但只有其中一个可以工作。如果statusCode为301/302,则会发生重定向,但未设置cookie。如果statusCode为200,则设置cookie,但重定向不起作用。有人知道如何在一个请求中同时使用这两种方法吗?我是否应该更改状态代码某些状态代码不允许设置cookie const response = { statusCode: 302, headers: { "Access-Con

下面是我用来在一个响应中设置cookie和重定向链接的代码,但只有其中一个可以工作。如果statusCode为301/302,则会发生重定向,但未设置cookie。如果statusCode为200,则设置cookie,但重定向不起作用。有人知道如何在一个请求中同时使用这两种方法吗?我是否应该更改状态代码某些状态代码不允许设置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);

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

下面是回应的屏幕截图


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

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

这是取自:

除非域属性无效,否则用户代理将拒绝cookie 指定包含源服务器的cookie的作用域。 例如,用户代理将接受具有域的cookie 中的“example.com”或“foo.example.com”属性 foo.example.com,但用户代理将不接受带有 “bar.example.com”或“baz.foo.example.com”的域属性

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


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

"Set-Cookie": 'data='+data,
为此:

"Set-Cookie": 'data=' + JSON.stringify(data),

正确序列化对象。

您将cookie设置为
数据=[object object]
而不是实际信息


您需要在该字符串中序列化数据对象。

显然,可以这样做:。所以,也许问题更多的是如何在您的框架中实现它?我建议您确切地告诉我们您使用的是什么框架。我使用的是无服务器框架,我能够单独实现它们,但总体上不会发生。当您重定向时,您是否正在改变域、端口或协议?或者,你只是在改变路径吗?“--这就是我所提到的,它指向了一个不同的领域。就像在新选项卡中打开url一样,我怀疑这是您的问题。服务器不允许在任何随机域中设置cookies。我完全理解你的观点。然而,在删除域部分后,它也不起作用,我编辑了question@user3649118-那么,您现在是否了解不能为完全不同的域设置cookie?唯一可以这样做的特殊情况是,如果原始域和新域共享一个共同的根域(例如,仅在子域中不同),并且您在cookie中使用
domain
属性。但是,如果这两个域不共享根域,则不能以任何方式为另一个域设置cookie。这被认为是一个巨大的安全漏洞,所以浏览器不允许这样做。如果我不使用domain属性,那么它必须默认设置为同一个域,并保留默认时间。但是我不能得到任何关于res域的cookie。可能是什么原因problem@user3649118-如果从cookie中删除
属性,则cookie应设置在请求的原始域上,而不是重定向到的域上。是,但重定向发生后,我没有看到任何原始域集的cookie,我甚至添加了文本而不是对象,但它只是重定向,没有设置cookie