javascript - Set-Cookie 添加 2 个 cookie

标签 javascript node.js cookies

我有这门课:

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/

相关文章:

javascript - 使用 Node 的 fs.readFile() 时,我应该在路径前加上 __dirname 吗?

javascript - 如何正确覆盖AngularJS中的ExceptionHandler?

c - 与 Node 和 Node-gyp 一起使用的 AWS Lambda 上出现奇怪的 "memory"行为

javascript - Puppeteer 集群示例抛出错误 : Unable to get browser page

javascript - 在 JavaScript 中销毁对象及其绑定(bind)

javascript - 从 JS 数组中选择一个值并跳过它,直到显示所有值

javascript - 我只能让 cookie 在 javascript 中具有一个值

php - 追踪流量来源

php - Chrome 正在创建具有相同 ID 的重复 session

javascript - WinJS 内联绑定(bind)语法