ExpressJS res.cookie 関数を使用してヘッダーに Cookie を追加しています
res.cookie('mycookie', x, y);
しかし、ExpressJS と Connect を掘り下げると、cookie 関数のパラメーターを一緒に文字列化するために使用される結合が末尾のセミコロンを追加しないことがわかりました
エクスプレス/res.js
res.cookie = function(name, val, options){
options = options || {};
if ('maxAge' in options) options.expires = new Date(Date.now() + options.maxAge);
if (undefined === options.path) options.path = this.app.set('basepath');
var cookie = utils.serializeCookie(name, val, options);
this.header('Set-Cookie', cookie);
};
connect/utils.js
exports.serializeCookie = function(name, val, obj){
var pairs = [name + '=' + encodeURIComponent(val)]
, obj = obj || {};
if (obj.domain) pairs.push('domain=' + obj.domain);
if (obj.path) pairs.push('path=' + obj.path);
if (obj.expires) pairs.push('expires=' + obj.expires.toUTCString());
if (obj.httpOnly) pairs.push('httpOnly');
if (obj.secure) pairs.push('secure');
//this doesnt append semi colon
return pairs.join('; ');
};
次に、Set-Cookie ヘッダーの仕様を調べました ( http://www.ietf.org/rfc/rfc2109.txt )
Set-Cookie 応答ヘッダーの構文は次のとおりです。
set-cookie = "Set-Cookie:" cookies
cookies = 1#cookie
cookie = NAME "=" VALUE *(";" cookie-av)
NAME = attr
VALUE = value
cookie-av = "Comment" "=" value
| "Domain" "=" value
| "Max-Age" "=" value
| "Path" "=" value
| "Secure"
| "Version" "=" 1*DIGIT
言語構造は、末尾にセミコロンが必要であることを暗示しているようです。
res.cookie() を使用して設定した Cookie に対して実行している一部のパーサーが「無効な Set-Cookie ヘッダー」エラーを返しているため、これについて明確にしたかっただけです。
Connect.js 経由で無効な Set-Cookie ヘッダーを設定する ExpressJS はありますか?