Express 使用 cookie-session 处理 session
Node.js 教程
收录了这篇文章

当然可以!下面是使用 cookie-session 在 Express.js 中处理会话的基础教程。

步骤 1: 安装依赖

首先需要安装 cookie-session 包。如果你还没有安装,请运行以下命令来安装:

npm install cookie-session

步骤 2: 创建加密密钥

为了安全地存储会话数据,你需要创建一个或多个加密密钥。这些密钥用于加密存储在客户端 cookie 中的数据,防止数据被篡改。你可以使用 Node.js 的 crypto 模块来生成一个随机密钥:

const crypto = require('crypto');
const secretKey = crypto.randomBytes(64).toString('hex');
console.log(`Secret Key: ${secretKey}`);

请将生成的密钥保存在一个安全的地方,并在你的应用中使用它。

步骤 3: 配置 cookie-session

接下来,你需要在你的 Express 应用中配置 cookie-session 中间件。在你的主应用文件中添加以下代码:

const express = require('express');
const cookieSession = require('cookie-session');

const app = express();

// Replace 'your-secret-key' with the actual key you generated.
app.use(cookieSession({
  name: 'session', // 设置 cookie 的名称
  keys: [secretKey], // 用于加密的密钥数组
  maxAge: 24 * 60 * 60 * 1000, // 会话的有效期 (毫秒),这里是24小时
}));

// 示例路由
app.get('/', (req, res) => {
  if (!req.session.views) {
    req.session.views = 1; // 初始化访问次数
  } else {
    req.session.views++; // 增加访问次数
  }
  res.send(`<p>您已经访问了这个页面 ${req.session.views} 次。</p>`);
});

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

这段代码做了以下几件事:

  • 配置了 cookie-session 中间件,使用你之前创建的密钥。
  • 设置了 cookie 的名称为 'session'。
  • 设置了 maxAge 选项,定义了会话数据在浏览器中的过期时间。在这个例子中,我们设定了 24 小时的有效期。
  • 添加了一个简单的路由处理器,用于统计用户访问次数。

步骤 4: 运行服务器

现在你可以运行你的 Express 服务器了:

node your-app-file.js

打开浏览器并访问 http://localhost:3000,你会看到页面显示你已经访问了多少次该页面。

这就是使用 cookie-session 的基本方法。你可以根据需要扩展更多的功能,比如用户认证等。

参数详解:

maxAge:表示从当前日期(Date.now())开始计算的毫秒数,表示该Cookie的过期时间。
expires:表示Cookie的过期日期(默认情况下,在会话结束时过期)的Date对象。
path:表示Cookie的路径(默认为/)的字符串。
domain:表示Cookie的域名(默认情况下没有指定)的字符串。
partitioned:表示是否在Chrome中对Cookie进行分区(默认为false)。如果为true,则嵌入式站点的Cookies将被分区,仅可在创建它们的相同顶级站点中读取。
priority:表示Cookie的优先级。可以设置为'low'、'medium'或'high'。
sameSite:表示是否为“相同站点”Cookie(默认为false)。可以设置为'strict'、'lax'、'none'或true(其对应值为'strict')。
secure:表示是否仅在HTTPS中发送Cookie(默认情况下,对于HTTP为false,对于HTTPS为true)。如果设置为true并且Node.js未直接连接到TLS连接,请务必阅读如何在代理后面设置Express或Cookie可能无法正确设置。
httpOnly:一个布尔值,表示该Cookie是否仅在HTTP(S)上传输,而不向客户端JavaScript提供(默认值为true)。
signed:一个布尔值,表示该Cookie是否需要签名(默认值为true)。
overwrite:一个布尔值,表示是否要覆盖以前设置的相同名称的Cookie(默认值为true)。

修改时间 2024-09-27

声明:本站所有文章和图片,如无特殊说明,均为原创发布。商业转载请联系作者获得授权,非商业转载请注明出处。
随机推荐
JavaScript screen对象
WordPress 添加文章自定义字段
JavaScript 修改内容和属性
浏览器的同源和跨域
TypeScript 和 Koa 实践
Node.js MySQL2 如何编写事务
JavaScript Global 对象
MySQL 表名预处理