在开发 Web 应用程序时,会话管理是一个至关重要的部分。会话会为用户提供一个持续的登录状态,以便在一定期限内记住他们的偏好和其他信息。Express.js 是一个快速、无依赖的 Node.js Web 应用程序框架,它提供了一种实现会话管理的简便方法。在本文中,我们将介绍如何使用 Connect 模块实现 Express.js 中的会话管理。
Connect 模块
在 Express.js 中,会话管理是由 Connect 模块实现的。Connect 是一个 Node.js 中的中间件框架,它允许在应用程序运行期间使用众多构建块。这些构建块可以提供不同的功能,例如身份验证、Compress、Cors 等。
具体来说,Connect 对会话管理的支持是通过一个称为 session 中间件的构建块实现的。这个中间件提供了在请求和响应周期中存储和检索会话数据的方法。为了使用 session 中间件来管理会话,我们需要在 Express.js 应用程序中安装 Connect 模块。
安装 Connect 模块
安装 Connect 模块非常简单,只需要在应用程序根目录中使用以下命令:
npm install connect
使用 session 中间件
在安装完 Connect 模块之后,我们需要将其添加到 Express.js 应用程序的中间件堆栈中,以启用会话管理。为此,我们可以执行以下步骤:
导入 Connect 模块并创建会话存储器
const connect = require('connect'); const session = require('express-session'); const MemoryStore = require('memorystore')(session); const app = express();
在本例中,使用
require
语句导入了 Connect 和 session 模块。将 session 注册为中间件
app.use(session({ secret: 'my-secret-key', resave: false, saveUninitialized: true, store: new MemoryStore({ checkPeriod: 86400000 // 1 day }) }));
app.use()
方法将 session 中间件添加到 Express 应用程序的中间件堆栈中。在上面的session
函数调用中,我们指定了以下各项:secret
: 用于生成会话的加密秘钥,以确保数据安全。resave
: 如果true
,则在请求周期内无论何时,都将强制更新会话。默认情况下,会话仅在添加或修改会话数据时进行更新。saveUninitialized
: 如果设为true
,则会话数据在请求周期中始终进行存储,即使会话数据为空。store
: 指定 session 数据的存储位置,例如内存存储、数据库存储等。在本例中,使用MemoryStore
来存储会话数据。
在以上示例代码中,我们还为
MemoryStore
指定了checkPeriod
属性,该属性指定会话存储器的自动清理频率。在本例中,会话存储器将每天清理一次。在 request 中读取和写入会话数据
一旦完成中间件的设置,我们就可以在 request 中存储和读取会话数据。以下是一些示例代码:
-- -------------------- ---- ------- ------------ ----- ---- -- - -- -- ------- -- -------------------- - ------- -- -- ------- -- ----- -------- - --------------------- ---------------- --------------- ---
在上面的示例代码中,我们在请求处理程序中使用
req.session
来存储和读取会话数据。我们可以像任何其他属性一样对其进行访问。
session 数据的存储和检索
在 session 中间件的默认设置下,所有的 session 数据都被存储在内存中。这种设置的优点是速度非常快,但缺点是会话数据会在应用程序重启、崩溃或系统重启时消失。如果需要永久存储会话数据,可以使用其他 session 存储器,例如数据库或文件系统。
为了使用文件系统存储器存储 session 数据,我们需要使用 file-store
模块。以下是一个示例:
-- -------------------- ---- ------- ----- --------- - --------------------------------------- ----------------- ------- ---------------- ------- ------ ------------------ ----- ------ --- ----------- ----- ------------ -- ----
在本例中,我们使用了 session-file-store
模块来创建 FileStore
,并将其指定为 session 存储器。该存储器将会话数据存储在应用程序的 ./sessions
目录下。
理解会话 cookie
在使用 session 中间件时,会话 cookie 是一个关键的概念。会话 cookie 是在浏览器中存储会话 ID 的小型文本数据。当用户通过浏览器请求 Web 应用程序时,会话 cookie 将会话 ID 传递回服务器,以便将请求连接到正确的会话。
默认情况下,会话 cookie 名称为 connect.sid
。我们可以使用以下代码来更改 cookie 名称:
app.use(session({ secret: 'my-secret-key', name: 'my-cookie', resave: false, saveUninitialized: true }));
结论
在本文中,我们介绍了如何使用 Connect 模块来实现会话管理。会话管理是 Web 应用程序的重要部分,因为它提供了一种持续的授权机制。我们看到了如何使用 session 中间件来存储和检索会话数据,以及如何配置不同的存储器。最后,我们还学习了有关会话 cookie 的一些重要概念。希望本文对初学者们能够有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66f45df8f40ec5a964ec50e0