Chrome只会从“Set-Cookie”头中设置第一个cookie。

5

我有一个非常简单的http Node.js服务器:

require('http').createServer(function(req, res) {
    res.statusCode = 200;
    res.setHeader('Set-Cookie', 'age=44; name=ok; something=else; path=/');
    res.end('ok ok ok', 'utf8');
}).listen(9999);

在使用最新版Chrome访问页面时,这些是服务器发送的响应头:server response headers。所以,服务器发送了正确的cookie。然而,浏览器似乎只存储了第一个cookie(age=44)。如果我再次刷新页面,这些是发送到服务器的请求头:server request headers 。只有第一个cookie(age=44)被发送。在控制台中记录document.cookie也仅返回'age=44'。当检查Chrome UI中的cookies时,我也可以看到只保存了第一个cookie:chrome ui cookies 那么问题出在哪里呢?
1个回答

3

如果您只是使用原始的Node,则可以将数组作为第二个参数传递给res.setHeader(field, value)

res.setHeader('Set-Cookie', [
  'age=44; path=/',
  'name=ok; path=/',
  'something=else; path=/'
])

如果使用Express 4.11.0+,您可以使用res.append(field [, value])
res.append('Set-Cookie', 'age=44; path=/');
res.append('Set-Cookie', 'name=ok; path=/');
res.append('Set-Cookie', 'something=else; path=/');

谢谢!我刚刚查看了节点文档,似乎如果您尝试使用res.setHeader多次设置相同的标头,则只会使用最后一个。感谢提到数组方法。 - bool3max

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接