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

时间:2017-06-22 14:11:08

标签: javascript node.js cookies 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);

我正在使用无服务器的nod​​ejs框架。

以下是回复的屏幕截图 enter image description here

但在cookie中注明的是der enter image description here

2 个答案:

答案 0 :(得分:1)

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

Cookie的domain部分仅适用于具有相同根域的域,但仅在子域中有所不同。

这取自RFC 6265

  

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

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

仅供参考,如果你的cookie确实得到了适当的设置,你就必须改变它:

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

到此:

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

正确序列化您的对象。

答案 1 :(得分:0)

您将Cookie设置为data=[Object object]而不是实际信息。

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