You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

express-session多用户会话冲突问题求助

多用户会话共用问题排查与修复方案

核心问题定位

你代码里的全局变量中间件犯了关键错误:使用app.locals存储用户信息和flash消息。app.locals是应用级全局变量,所有请求共享同一空间——当第二个用户完成登录后,app.locals.user会被新的req.user覆盖,导致所有后续请求(包括其他用户的)都加载最后登录用户的会话数据。

修复步骤

把全局变量的赋值对象从app.locals改成res.locals,res.locals是请求级变量,每个请求都有独立副本,不会出现跨用户覆盖的问题。修改后的代码如下:

// Global variables
app.use((req, res, next) => {
  res.locals.message = req.flash('message');
  res.locals.success = req.flash('success');
  res.locals.user = req.user;
  next();
});

额外优化建议

为提升会话安全性和性能,还可以调整这些session配置:

  • 将resave: true改为resave: false:无需强制保存未修改的会话,减少数据库读写压力
  • 将saveUninitialized: true改为saveUninitialized: false:不保存未初始化的空会话,符合隐私规范
  • 将cookie.httpOnly设为true:禁止前端JS访问会话cookie,防范XSS攻击(除非你有必须前端操作cookie的特殊需求)
  • 不要硬编码secret:改用环境变量(比如process.env.SESSION_SECRET),避免敏感信息泄露

内容的提问来源于stack exchange,提问作者Khakovs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 05:46:32