2016-11-14 1 views
0

У меня есть мертвый простой HTTP nodejs сервер:Chrome устанавливает только первое печенье из заголовка «Set-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); 

При посещении страницы в последней версии Chrome, эти заголовки ответа, посылаемые с сервера:

server response headers

Таким образом, сервер посылает правильный куки. Однако браузер только, кажется, сохраняет первый (age=44). Если я еще раз обновите страницу, это заголовки запроса отправляется на сервер:

server request headers

Только первый печенье (age=44) отправляется. Ведение журнала document.cookie в консоли также возвращает только 'age=44'.

При проверке куки с интерфейсом Chrome, я могу также видеть, что только первый один сохраняется:

Что здесь проблема?

chrome ui cookies

ответ

1

Если вы используете только ванильный Node, то вы можете просто передать массив в качестве второго параметра res.setHeader(field, value):

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

При использовании экспресс 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=/'); 
+0

Спасибо! Я просто посмотрел на документы узла, кажется, что если вы попытаетесь установить один и тот же заголовок несколько раз с помощью 'res.setHeader', будет использоваться только последний. Спасибо, что упомянул подход массива. –