问一个关于服务端cookie的Nodejs问题

问一个关于服务端cookie的Nodejs问题

res.setHeader(‘Set-Cookie’, ‘username=’+req.body.username+’; path=/; max-age=360000’); res.setHeader(‘Set-Cookie’, ‘pwd=’+req.body.pwd+’; path=/; max-age=360000’); 我这里在服务端 写了2个cookie 但是当第二次再执行这里的时候 原来的cookie并没有被覆盖,本来想删除原有的cookie的 但是感觉这方法不靠谱,最重要的是还不知道怎么删除… 想请教各位前辈 有什么比较好用的处理cookie的模块可以用的?


4 回复

问一个关于服务端Cookie的Node.js问题

你提到在服务端设置了两个Cookie,但发现原来的Cookie没有被覆盖。实际上,使用res.setHeader('Set-Cookie', ...)多次设置Cookie时,浏览器会保留所有这些Cookie,而不是替换它们。如果你想覆盖或删除某个特定的Cookie,需要使用正确的语法。

如何正确设置和删除Cookie

在Node.js中,可以使用一些成熟的库来更方便地管理Cookie,例如cookie-parser。以下是如何使用cookie-parser来设置和删除Cookie的示例:

  1. 安装cookie-parser
npm install cookie-parser
  1. 配置和使用cookie-parser
const express = require('express');
const cookieParser = require('cookie-parser');

const app = express();
app.use(cookieParser());

// 设置Cookie
app.post('/set-cookie', (req, res) => {
    res.cookie('username', req.body.username, { maxAge: 3600000, path: '/' });
    res.cookie('pwd', req.body.pwd, { maxAge: 3600000, path: '/' });

    res.send('Cookies set successfully');
});

// 删除Cookie
app.get('/delete-cookie', (req, res) => {
    res.clearCookie('username', { path: '/' });
    res.clearCookie('pwd', { path: '/' });

    res.send('Cookies deleted successfully');
});

app.listen(3000, () => console.log('Server running on port 3000'));

示例解释

  • 设置Cookie:

    • 使用res.cookie()方法设置Cookie,参数包括Cookie名称、值以及可选的配置(如过期时间maxAge和路径path)。
  • 删除Cookie:

    • 使用res.clearCookie()方法删除Cookie。该方法需要提供Cookie名称和相同的配置(如路径path),以确保正确地删除指定的Cookie。

通过这种方式,你可以更灵活地管理和操作Cookie,而不需要手动处理复杂的Header设置。


你在响应头设置的cookie是什么名字,就在下一个响应头把这个名字的cookie的max-age设为0。

res.setHeader(‘Set-Cookie’, “username=abc; path=/; max-age=36000”);

res.setHeader(‘Set-Cookie’, “username=abc; path=/; max-age=0”);

在Node.js中设置Cookie时,如果你直接使用res.setHeader('Set-Cookie', ...),每个调用都会添加一个新的Cookie,而不会覆盖旧的Cookie。因此,如果你想更新或删除某个Cookie,需要更细粒度的控制。

你可以使用像cookie-parser这样的中间件来简化Cookie的管理和操作。cookie-parser不仅能够解析请求中的Cookie,还能方便地设置和清除Cookie。

首先,你需要安装cookie-parser

npm install cookie-parser

然后,在你的Express应用中使用它:

const express = require('express');
const cookieParser = require('cookie-parser');

const app = express();
app.use(cookieParser());

// 设置Cookie
app.post('/set-cookie', (req, res) => {
    res.cookie('username', req.body.username, { maxAge: 360000, path: '/' });
    res.cookie('pwd', req.body.pwd, { maxAge: 360000, path: '/' });
    res.send('Cookies set successfully!');
});

// 删除Cookie
app.post('/delete-cookie', (req, res) => {
    res.clearCookie('username', { path: '/' });
    res.clearCookie('pwd', { path: '/' });
    res.send('Cookies deleted successfully!');
});

app.listen(3000, () => console.log('Server running on port 3000'));

解释

  • res.cookie(name, value, options):用于设置一个Cookie。
  • res.clearCookie(name, options):用于删除一个Cookie。注意,删除Cookie时需要指定相同的路径和域(默认为path: '/')。

这种方法更加灵活,也更符合预期的行为,特别是在需要更新或删除Cookie的情况下。

回到顶部