如何在 Express.js 中管理 Session 和 Cookie?

Express 是一个构建在 Node.js Web 服务器功能之上的轻量级框架,旨在简化 API 并添加有益的新特性。它通过中间件和路由让我们更容易组织应用程序的功能。它为 Node.js 的 HTTP 对象添加了有用的工具,并有助于渲染动态 HTTP 对象。Express 是 MEAN 栈的一部分,这是一种用于构建快速、健壮且易于维护的生产级 Web 应用的全栈 JavaScript 解决方案。

在本文中,我们将学习如何在 Express JS 中管理 Session 和 Cookie。在 Express JS 中,通常使用两个包来管理 Cookie 和 Session。它们是 ‘express-session‘ 以及用于解析 Cookie 的 ‘cookie-parser‘

目录

  • Express JS 中的 Session
  • Express JS 中的 Cookies

实现方法

为了在 Express.js 中管理 Session 和 Cookie,我们将使用 express-session 来存储 Session 数据,使用 cookie-parser 来解析 Cookie。我们需要实现中间件来保护路由,并使用 Session 数据在多个请求之间维护用户状态。

Express JS 中的 Session

Session 是一种在 Web 应用程序的多个请求之间持久化特定用户数据的方法。Express 提供了 ‘express-session‘ 中间件来管理 Session。下面的命令演示了如何使用 npm 在 express 中安装 ‘express-session‘ 模块。

npm install express express-session

现在,我们的 Express JS 应用程序中已经安装了 express-session。下面的代码展示了如何在我们的 Express JS 应用程序中使用这个 express-session 中间件。

const express = require("express");
const session = require("express-session");
const app = express();

app.use(
	session({
		secret: "your-secret-key",
		resave: false,
		saveUninitialized: false,
	})
);

参数说明:

  • secret: 这是一个用于签署 Session ID Cookie 的密钥。它必须是一个强且唯一的密钥。
  • resave 即使 Session 没有被修改,也强制将其保存回 Session 存储。
  • saveUninitialized: 强制将“未初始化”的 Session 保存到存储中。当 Session 是新的但尚未被修改时,它就是未初始化的。

Express JS 中的 Cookies

Cookie 是存储在客户端浏览器中的小块数据。Express 有一个名为 ‘cookie-parser‘ 的中间件,用于设置 Cookie。下面的命令将在你的应用程序中安装该中间件。

npm install cookie-parser

更新后的 package.json 文件中的依赖项:

"dependencies": {
    "cookie-parser": "^1.4.6",
    "express": "^4.19.2",
    "express-session": "^1.18.0"
}

在你的 Express JS 程序中包含 cookie-parser 中间件函数。

const cookieParser = require(‘cookie-parser‘);
app.use(cookieParser());

项目结构:

!项目结构项目结构

示例: 下面的程序演示了在 Express JS 中 ‘express-session‘ 和 ‘cookie-parser‘ 的用法。

HTML


CODEBLOCK_f4ba0784

JavaScript


// index.js

const express = require("express");

const session = require("express-session");

const cookieParser = require("cookie-parser");

const app = express();

// 中间件设置

app.use(

session({

secret: "your-secret-key",

resave: false,

saveUninitialized: false,

})

);

app.use(cookieParser());

// 用于演示的示例用户数据

// 检查用户是否已通过身份验证的中间件

const isAuthenticated = (req, res, next) => {

if (req.session.user) {

next();

} else {

res.redirect("/login");

}

};

// 路由

app.get("/", (req, res) => {

res.send("Welcome to the Expre

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/51107.html
点赞
0.00 平均评分 (0% 分数) - 0