,以增强@Corey哈特答案,我已经改写了parseCookies()
使用:
这里的工作示例:
var http = require('http');
function parseCookies(cookie) {
return cookie.split(';').reduce(
function(prev, curr) {
var m =/*([^=]+)=(.*)/.exec(curr);
var key = m[1];
var value = decodeURIComponent(m[2]);
prev[key] = value;
return prev;
},
{ }
);
}
function stringifyCookies(cookies) {
var list = [ ];
for (var key in cookies) {
list.push(key + '=' + encodeURIComponent(cookies[key]));
}
return list.join('; ');
}
http.createServer(function (request, response) {
var cookies = parseCookies(request.headers.cookie);
console.log('Input cookies: ', cookies);
cookies.search = 'google';
if (cookies.counter)
cookies.counter++;
else
cookies.counter = 1;
console.log('Output cookies: ', cookies);
response.writeHead(200, {
'Set-Cookie': stringifyCookies(cookies),
'Content-Type': 'text/plain'
});
response.end('Hello World\n');
}).listen(1234);
我也注意到,OP用途http模块。 如果OP使用restify,他可以使restify-cookies使用:
var CookieParser = require('restify-cookies');
var Restify = require('restify');
var server = Restify.createServer();
server.use(CookieParser.parse);
server.get('/', function(req, res, next){
var cookies = req.cookies; // Gets read-only cookies from the request
res.setCookie('my-new-cookie', 'Hi There'); // Adds a new cookie to the response
res.send(JSON.stringify(cookies));
});
server.listen(8080);
如果cookie的值包含一个等于('=')符号如Facebook的饼干等'fbm_1234123412341234 = BASE_DOMAIN = .domain.com'之一上面的代码将不正确地工作。 – Eye 2012-10-03 09:31:39
不要cookie值必须被URL编码/百分比编码? = doockie值在这种情况下是无效的,对吧? – les2 2013-03-13 19:52:05
在这种情况下,按';'分割,然后按'='的第一个实例分割。左边是关键,右边是价值。 – lwansbrough 2013-06-03 19:33:03