cookie是http中一个基本的组成,用来记录服务器和客户端的状态,可以标识和认证客户。当服务器在返回报文中设置了cookie后,客户端以后每次请求(相同域名)都会附带这个cookie(未过期的)。
'use strict'
//cookie 的使用
var http = require('http');
//生成cookie
var serialize = function (name, val, opt){
var pairs = [name + '=' + encodeURI(val)];
opt = opt || {};
//Max_Age 告诉浏览器这个cookid多久后过期,与此类似的还有Expaires属性
if(opt.maxAge) pairs.push('Max-Age=' + opt.maxAge);
//域
if(opt.domain) pairs.push('Domain=' + opt.domain);
//路径
if(opt.path) pairs.push('Path=' + opt.path);
//在什么时间点过期
if(opt.expires) pairs.push('Expires=' + opt.expires.toUTCString());
//设置后只有在服务器才能访问cookie
if(opt.httpOnly) pairs.push('HttpOnly');
//设置后只有https中cookie才起作用。
if(opt.secure) pairs.push('Secure');
return pairs.join(';');
}
//解析cookie
var parseCookie = function(cookie){
var cookies = {};
if(!cookie){
return cookies;
};
var list = cookie.split(';');
for(let i = 0; i < list.length; i++){
var pair = list[i].split('=');
cookies[pair[0].trim()] = pair[1];
}
return cookies;
}
const server = http.createServer(function base(req,res){
console.log(req.method);
console.log(req.url);
req.cookies = parseCookie(req.headers.cookie);
if(!req.cookies.isVisit){
res.setHeader('Set-Cookie',serialize('isVisit','1','utf8',{maxAge : '5000'}));
res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
res.end('<h1>初次见面</h1>');
}else{
res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
res.end('<h1>再次见面</h1>');
}
});
server.listen(8899);
console.log('Server running');
但每次向服务器发送cookie(cookie过多)时会影响性能。