我有这门课:
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 (age=13)
我认为这是因为响应中有一个变量,存储cookie的地方,当我使用Set-Cookie时,它设置了这个变量的值,但是我如何才能得到我之前添加的变量呢?
最佳答案
只能有一个 Set-Cookie
header ,并且每次调用 cookie.set
时都会覆盖它的值。
正确的做法是在类中保留一个本地字符串变量,并在每次调用 cookie.set
时将新的 name=value
对附加到它上。 p>
class Cookie
{
var cookieString = ""
// ...
set(name, value)
{
if (cookieString)
{
cookieString += '; '
}
cookieString += `${name}=${value}`
this.res.setHeader('Set-Cookie', cookieString)
}
//...
}
关于javascript - Set-Cookie 添加 2 个 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53173991/