仅设置set-cookie标头中的第一个cookie

问题描述 投票:1回答:1

我正在尝试从快递节点后端以单个响应发送多个Cookie。 Set-cookie标头设置了看似有效的值,但除第一个以外,没有任何cookie被存储。是什么原因造成的?其他标头是否可能以某种方式干扰?

app.post("/api/test", function(req, res) {
    res.cookie("age", "44");
    res.cookie("name", "ok");
    res.cookie("something", "else");
    res.send("cookies set");
});

标题中的结果

Access-Control-Allow-Credentials: true
Cache-Control: private
Content-Type: text/html; charset=utf-8
Etag: W/"b-AindM8n+eJQTR6jb7Hg8S4fG8qI"
Expires: Sat, 05 Oct 2019 16:18:12 GMT
Function-Execution-Id: r7d6qjgl5noi
Server: Google Frontend
X-Cloud-Trace-Context: 051139bdc4cc753cad51c0dd3e89e0b8;o=1
X-Powered-By: Express
Content-Length: 11
Accept-Ranges: bytes
Date: Sat, 05 Oct 2019 16:18:12 GMT
Connection: keep-alive
Set-Cookie: age=44; path=/,name=ok; path=/,something=else; path=/
X-Served-By: cache-ams21036-AMS
X-Cache: MISS
X-Cache-Hits: 0
X-Timer: S1570292292.302186,VS0,VE410
Vary: Origin,cookie,need-authorization, x-fh-requested-host, accept-encoding

我希望它可以在浏览器中存储3个cookie,但始终只保存第一个cookie。

node.js express cookies http-headers setcookie
1个回答
0
投票

似乎某些版本的express可能会与生成无效或至少经常不兼容的cookie标头(syntax of a cookie header, RFC 6265)有关,其中多个cookie出现在单个Set-Cookie标头中。更标准的方法是在响应中提供多个Set-Cookie标头。

值得注意的是,从以上RFC来看,也是excerpt

原始服务器不应将多个Set-Cookie标头字段折叠到单个标头字段。折叠HTTP标头的常用机制字段(即[RFC2616]中定义的字段)可能会更改Set-Cookie标头字段,因为使用了%x2C(“,”)字符Set-Cookie的作品与这种折叠方式有冲突。

此文档指出了一种可能的解决方法,大约在2014年发布:http://www.connecto.io/blog/nodejs-express-how-to-set-multiple-cookies-in-the-same-response-object/

我无法使用express 4.17.1复制此代码(类似的代码生成了多个Set-Cookie标头)。行为似乎已在4.13.0左右更改:https://github.com/expressjs/express/commit/5915894af3f14e75dd3121fdc2d92ae55206e398

我会考虑更新您的Express版本,或使用上面链接的文章中的解决方法。

© www.soinside.com 2019 - 2024. All rights reserved.