在 node.js 中使用 express-session 管理会话的核心是正确配置中间件、选择合适存储(如 redis)、通过 req.session 读写数据,并设置安全 cookie 属性;必须在路由前调用 app.use(session({...})),且 secret、resave、saveuninitialized 等关键选项不可缺失。

在 Node.js 中使用 express-session 管理会话,核心是配置中间件、设置存储方式,并通过 req.session 读写数据。关键在于正确初始化、避免常见坑(比如没配 secret 或没启用 cookie)。
安装和基础配置
先安装依赖:
npm install express express-session
然后在 Express 应用中启用中间件,注意必须在路由之前调用:
const express = require('express');
const session = require('express-session');
<p>const app = express();</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill9063" title="chartjs-reporter"><img
src="https://img.php.cn/upload/skill/000/000/081/179239514984446.jpg" alt="chartjs-reporter" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill9063" title="chartjs-reporter" class="overflowclass">chartjs-reporter</a>
<p class="overflowclass">此技能用于在用户需要将结构化数据(查询结果、CSV 摘要、JSON 记录或 Python 字典/列表)转换为独立的 HTML 页面时使用。</p>
</div>
<a rel="nofollow" href="/xiazai/skill9063" title="chartjs-reporter" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div><p>app.use(session({
secret: 'your-secret-key', // 必填,用于签名 session ID
resave: false, // 不强制保存未修改的 session
saveUninitialized: false, // 不保存未初始化的空 session
cookie: { secure: false } // 开发时设为 false;生产环境需 HTTPS 才设 true
}));</p>
读写会话数据
会话对象挂载在 req.session 上,可直接赋值或删除属性:
- 设置:
req.session.userId = 123; - 读取:
console.log(req.session.userId); - 销毁:
req.session.destroy();(清除服务端 session) - 注销登录常用:
req.session.destroy(() => res.redirect('/login'));
选择合适的 session 存储
默认内存存储只适合开发,重启进程会丢失所有 session。生产环境推荐外接存储:
-
Redis:最常用,高性能、支持过期自动清理。配合
connect-redis -
MongoDB:用
connect-mongo - PostgreSQL / MySQL:适合已有关系型数据库的项目
示例(Redis):
const RedisStore = require('connect-redis')(session);
const redisClient = require('redis').createClient();
<p>app.use(session({
store: new RedisStore({ client: redisClient }),
secret: 'your-secret',
resave: false,
saveUninitialized: false,
cookie: { maxAge: 24 <em> 60 </em> 60 * 1000 } // 24 小时
}));</p>
安全与注意事项
会话安全不能只靠 secret,还需关注:
-
cookie.httpOnly: true(防止 XSS 读取 session ID) -
cookie.secure: true(仅 HTTPS 传输,生产环境必须) -
cookie.sameSite: 'lax'或'strict'(防 CSRF) - 避免在 session 中存敏感数据(如密码),只存用户 ID 等标识符
- 定期清理过期 session(Redis/Mongo 自带 TTL,文件或内存存储需手动处理)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










