我有这个课:
var qs = require('querystring');
class Cookie
{
constructor(req, res)
{
this.req = req;
this.res = res;
}
get(name)
{
if (this.has(name))
{
var cookies = qs.parse(this.req.headers.cookie, '; ', '=');
return cookies[name];
}
return null;
}
set(name, value)
{
this.res.setHeader('Set-Cookie', `${name}=${value};`)
}
delete(name)
{
if (this.has(name))
{
this.set(name, '')
}
}
has(name)
{
if (typeof this.req.headers.cookie !== 'undefined')
{
const cookies = qs.parse(this.req.headers.cookie, '; ', '=')
return typeof cookies[name] !== 'undefined';
}
return false;
}
}
然后我尝试一下:
const http = require('http');
http.createServer((req, res) => {
const cookie = new Cookie(req, res);
cookie.set('name', 'Nikita')
cookie.set('age', '13')
res.setHeader('Content-Type', 'text/plain');
res.write('Now you have cookies')
res.end()
}).listen(8000)
然后我在“编辑此Cookie”中查找,仅看到最后一个cookie(年龄= 13)
我认为这是因为响应中有一个变量,其中存储cookie,并且当我使用Set-Cookie时,它会设置该变量的值,但是如何获得之前添加的变量?
答案 0 :(得分:1)
只能有一个Set-Cookie
标头,并且每次调用cookie.set
时都将覆盖其值。
正确的方法是在类中保留一个本地字符串变量,并在每次调用name=value
时将新的cookie.set
对附加到该变量上
class Cookie
{
var cookieString = ""
// ...
set(name, value)
{
if (cookieString)
{
cookieString += '; '
}
cookieString += `${name}=${value}`
this.res.setHeader('Set-Cookie', cookieString)
}
//...
}