📜  Express.js 中的 req.cookies 和 req.signedCookies(1)

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

Express.js 中的 req.cookies 和 req.signedCookies

在 Express.js 中,req 对象被用来表示客户端发起的 HTTP 请求。其中的 cookiessignedCookies 属性用来操作请求中的 Cookies 数据。

Cookies

当客户端向服务器发送请求时,可能会携带一些 Cookies 数据,这些数据会被保存在 req.cookies 中。这个属性是一个对象,其中每个键值对代表一个 Cookie,键值对的键是 Cookie 的名称,值是 Cookie 的值。如果请求中不存在任何 Cookies 数据,那么 req.cookies 将是一个空对象 {}

以下是一个使用 req.cookies 的简单例子:

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

app.get('/', (req, res) => {
  const name = req.cookies.name; // 获取名为 name 的 Cookie
  res.send(`Hello, ${name}!`);
});

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

req.cookies 相比,req.signedCookies 具有额外的功能。为了保证 Cookie 数据在传输过程中不被篡改,可以使用一些加密算法创建一些签名来保护它们。在 Express.js 中,使用 cookie-parser 中间件可以完成这个过程。

通过在 cookie-parser 中设置一个私钥,可以为所有 Cookies 创建签名。当客户端向服务器发送带有签名的 Cookies 数据时,这些数据会被保存在 req.signedCookies 中。

以下是一个使用 req.signedCookies 的简单例子:

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

app.use(cookieParser('my secret key'));

app.get('/', (req, res) => {
  const name = req.signedCookies.name; // 获取名为 name 的签名 Cookie
  res.send(`Hello, ${name}!`);
});

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

注意:如果没有为 Cookie 创建签名,那么尝试使用 req.signedCookies 访问没有签名的 Cookie 时,会抛出一个 SignatureVerificationFailed 异常。

以上就是在 Express.js 中使用 req.cookiesreq.signedCookies 的简单介绍。要深入了解这些属性,请查看 Express.js 官方文档。