Chrome仅设置“Set-Cookie”标头中的第一个Cookie

时间:2016-11-14 16:06:45

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

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

String [] NUMBERS= {"3 ","6 ","13 "};

Spinner s_spinner = (Spinner) findViewById(R.id.Spinner);

ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<>(this,
                    android.R.layout.simple_dropdown_item_1line, NUMBERS);

// Specify the layout to use when the list of choices appears 
           spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

// attaching data adapter to spinner
s_spinner.setAdapter(spinnerAdapter );

在访问最新版Chrome浏览器中的页面时,这些是从服务器发送的响应标头:

server response headers

因此,服务器发送正确的cookie。但是,浏览器似乎只存储第一个(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); )。如果我再次刷新页面,则这些是发送到服务器的请求标头:

server request headers

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

从Chrome的用户界面检查Cookie时,我还可以看到只保存了第一个:

这里有什么问题?

chrome ui cookies

1 个答案:

答案 0 :(得分: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=/');