Nodejs里到底有没有人用cookie啊?

Nodejs里到底有没有人用cookie啊?

app.post(’/views/login.html’,function(req,res,next){ res.setHeader(‘Set-Cookie’, “username=123; path=/; max-age=0”); console.log(req.headers); }); 这样到底哪错了? 可是貌似cookie删不掉啊 输出的结果是: { host: ‘localhost:3000’, connection: ‘keep-alive’, ‘content-length’: ‘14’, accept: ‘text/plain, /; q=0.01’, origin: ‘http://localhost:3000’, ‘x-requested-with’: ‘XMLHttpRequest’, ‘user-agent’: ‘Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Ge cko) Chrome/35.0.1916.153 Safari/537.36’, ‘content-type’: ‘application/x-www-form-urlencoded; charset=UTF-8’, referer: ‘http://localhost:3000/’, ‘accept-encoding’: ‘gzip,deflate,sdch’, ‘accept-language’: ‘zh-CN,zh;q=0.8’, cookie: ‘username=123; pwd=123’ }


4 回复

Node.js 中的 Cookie 使用

在 Node.js 中使用 Cookie 是非常常见的。通常,我们会使用一些库来简化操作,比如 cookie-parser 或者 express-session。你的问题中涉及到了如何设置和删除 Cookie。

问题分析

你提到的问题在于试图通过设置一个过期的 Cookie 来删除它。你的代码片段如下:

app.post('/views/login.html', function(req, res, next) {
    res.setHeader('Set-Cookie', "username=123; path=/; max-age=0");
    console.log(req.headers);
});

这里的问题是 max-age=0 并不能保证 Cookie 被删除。浏览器的行为可能因不同实现而异。为了确保 Cookie 被删除,你可以设置 max-age=-1 或者直接设置 expires 属性为过去的日期。

示例代码

以下是一个更完整的例子,展示了如何正确地设置和删除 Cookie:

const express = require('express');
const app = express();

// 解析 cookie
app.use(express.urlencoded({ extended: false }));

app.post('/login', function(req, res, next) {
    // 设置 Cookie
    res.setHeader('Set-Cookie', 'username=123; path=/; max-age=3600'); // 有效期为 1 小时
    res.send('Login successful');
});

app.post('/logout', function(req, res, next) {
    // 删除 Cookie
    res.setHeader('Set-Cookie', 'username=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT');
    res.send('Logout successful');
});

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

解释

  1. 设置 Cookie

    • /login 路由中,我们设置了 username 的 Cookie,并指定了其有效期为 1 小时。
    • path=/ 表示该 Cookie 可以在应用的所有路径下访问。
  2. 删除 Cookie

    • /logout 路由中,我们通过将 max-age 设置为 0 或者设置 expires 为过去的时间(如 Thu, 01 Jan 1970 00:00:00 GMT),来删除 Cookie。
    • 这样可以确保浏览器会认为该 Cookie 已经过期并将其删除。

总结

Node.js 中确实广泛使用 Cookie,特别是在处理用户认证和会话管理时。通过使用适当的设置方法,你可以有效地管理和删除 Cookie。希望这些示例代码能帮助你更好地理解如何在 Node.js 应用中使用 Cookie。


res.setHeader(‘Set-Cookie’, “username=123; path=/; max-age=0”); 这一行并不是替换作用,是增加作用。

让Cookie过期就算删除了 貌似不是max-age 用 expires
另外域和路径要一至,不然只是增加一个立即过期的新cookie

在Node.js中使用Cookie是非常常见的需求,尤其是在处理用户登录、会话管理等场景时。根据你的描述和代码示例,你尝试通过设置max-age为0来删除一个Cookie,但发现Cookie并没有被删除。这可能是因为在处理HTTP响应头时存在一些问题。

首先,让我们来看看如何正确地在Node.js中设置和删除Cookie。

如何正确设置Cookie

你可以使用内置的res.cookie()方法来设置Cookie,这比直接设置Set-Cookie头部更简单且健壮。例如:

const express = require('express');
const app = express();

app.post('/views/login.html', (req, res) => {
    // 设置一个名为username的Cookie
    res.cookie('username', '123', { path: '/', maxAge: 60 * 60 * 1000 }); // Cookie将在一小时内过期
    res.send('登录成功');
});

// 删除Cookie的示例
app.post('/logout', (req, res) => {
    res.clearCookie('username', { path: '/' }); // 清除名为username的Cookie
    res.send('登出成功');
});

app.listen(3000, () => console.log('服务器运行在 http://localhost:3000'));

如何删除Cookie

要删除Cookie,通常的做法是将Cookie的max-age设置为0或负值,并且确保路径相同。上述代码中的res.clearCookie()方法正是这样做的。如果你坚持直接操作Set-Cookie头部,你需要确保头部格式正确。你可以尝试以下方式来删除Cookie:

res.setHeader('Set-Cookie', 'username=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT');

这段代码会将username Cookie设置为过期时间在1970年1月1日(即立即过期),从而实现删除的效果。

总结

在Node.js中使用Cookie时,推荐使用Express框架提供的res.cookie()res.clearCookie()方法,因为它们更容易理解和维护。直接修改Set-Cookie头部时需要特别注意格式。希望这些信息对你有所帮助!

回到顶部