【问题标题】:Chrome only sets the first cookie from the 'Set-Cookie' headerChrome 仅设置“Set-Cookie”标头中的第一个 cookie
【发布时间】:2016-11-15 00:35:04
【问题描述】:

我有一个简单的 http nodejs 服务器:

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 中访问页面时,这些是服务器发送的响应标头:

因此,服务器发送了正确的 cookie。但是,浏览器似乎只存储第一个 (age=44)。如果我再次刷新页面,这些是发送到服务器的请求标头:

仅发送第一个 cookie (age=44)。在控制台中记录document.cookie 也只返回'age=44'

从 Chrome 的 UI 检查 cookie 时,我还可以看到只有第一个被保存:

这里有什么问题?

【问题讨论】:

    标签: node.js google-chrome http cookies http-headers


    【解决方案1】:

    如果您只是使用 vanilla 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 多次设置相同的标头,则只会使用最后一个。感谢您提到数组方法。
    猜你喜欢
    • 2015-09-12
    • 2020-08-16
    • 2019-11-12
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 2017-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多