下面是我用于在单个响应中设置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);
我正在使用无服务器的nodejs框架。
答案 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]
而不是实际信息。
您需要在该字符串中序列化您的数据对象。