📜  Node.js 中的 HTTP Cookie(1)

📅  最后修改于: 2023-12-03 15:03:15.053000             🧑  作者: Mango

Node.js 中的 HTTP Cookie

什么是 HTTP Cookie?

在 Web 应用程序中,Cookie 是存储在用户浏览器中的数据文件。无论何时用户在浏览器中发出请求,该 Cookie 就会发送回服务器。Cookie 最常用于跟踪用户访问 Web 活动和存储偏好设置。

如何使用 Node.js 创建和发送 Cookie?

在 Node.js 中,我们可以使用内置的 http 模块来创建和发送 Cookie。以下代码展示了如何在服务器响应中设置 Cookie:

const http = require('http');

http.createServer((req, res) => {
  res.writeHead(200, {
    'Set-Cookie': 'name=Alice; Expires=Wed, 21 Oct 2022 07:28:00 GMT; HttpOnly'
  });
  res.end('Hello World!\n');
}).listen(3000);

在上面的代码中,Set-Cookie 头用于设置 Cookie。name=Alice 表示 Cookie 名称为 “name”,其值为 “Alice”。在这里,该 Cookie 将在 2022 年 10 月 21 日 07:28:00 GMT 后过期,并且将是只读的,因为我们使用了 HttpOnly 标志。

如何在 Node.js 中读取 Cookie?

在发送 Cookie 到浏览器后,当用户再次访问您的网站时,浏览器将自动发送 Cookie。现在我们需要在服务器端读取 Cookie。为此,我们可以使用 request 对象的 headers 属性。

对于上面的代码示例,以下是如何读取 name Cookie:

const http = require('http');

http.createServer((req, res) => {
  const cookie = req.headers.cookie;
  if (cookie) {
    const name = cookie.replace(/(?:(?:^|.*;\s*)name\s*\=\s*([^;]*).*$)|^.*$/, '$1');
    res.end(`Hello ${name}!\n`);
  } else {
    res.end('Hello World!\n');
  }
}).listen(3000);

在上面的代码中,我们检查 req.headers.cookie 属性以查看浏览器是否发送了 Cookie。如果 Cookie 存在,则使用正则表达式从 Cookie 中提取名称和值。

如何使用第三方库处理 Cookie?

尽管 Node.js 给了我们处理 Cookie 的能力,但是它仍然需要一些手动操作。为了便于 Cookie 的创建和管理,我们可以使用第三方库。以下是一些值得使用的 Cookie 库:

这些库都提供了更简单的方法来处理 Cookie,并且支持更多的功能,例如签名和加密 Cookie。

总结

在 Node.js 中使用 Cookie 是向用户提供个性化 Web 体验的关键之一。通过设置和读取 Cookie,我们可以跟踪用户信息和偏好,以改善用户体验。如果您需要更多的 Cookie 功能,可以考虑使用第三方库。