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

Node.js服务器重启时如何保留express-session用户登录状态

实现express-session持久化存储(重启服务不丢失登录状态)

默认express-session将会话数据存储在服务端内存中,服务器重启后内存数据清空就会导致所有用户登出,使用connect-pg-simple将会话存入PostgreSQL即可解决该问题,具体实现如下:

1. 安装所需依赖

npm install connect-pg-simple pg

2. 核心配置说明

connect-pg-simple的必填/常用配置项如下:

  • conString:PostgreSQL连接字符串,格式为postgresql://用户名:密码@数据库地址:端口/数据库名
  • pool:可直接传入项目中已初始化的pg连接池实例,复用连接资源,不需要再单独配置conString
  • tableName:自定义存储会话的表名,不填默认是session
  • createTableIfNotExists:设为true时,服务首次启动会自动创建会话表,不需要手动执行建表SQL
  • ttl:会话过期时间,单位为秒,默认取session配置中cookie.maxAge的值,未配置时默认1天

3. 完整代码示例

const session = require('express-session');
const pgSession = require('connect-pg-simple')(session);
// 若项目已有pg连接池实例,可直接引入复用
// const { pool } = require('./你的pg连接池配置文件路径');

app.use(session({
  store: new pgSession({
    // 二选一配置连接即可:要么传连接字符串,要么传已有的连接池
    conString: 'postgresql://dbuser:dbpass@127.0.0.1:5432/mydb',
    // pool: pool,
    createTableIfNotExists: true, // 自动建表,生产环境也可以提前手动建表后关闭该配置
    ttl: 7 * 24 * 60 * 60 // 示例:会话有效期7天,按需调整
  }),
  secret: process.env.SESSION_SECRET || '你的自定义加密密钥', // 建议用环境变量存储密钥,不要硬编码
  resave: false,
  saveUninitialized: false, // 未登录的空会话不存储,节省数据库空间
  cookie: {
    maxAge: 7 * 24 * 60 * 60 * 1000, // cookie有效期和会话ttl保持一致,单位为毫秒
    httpOnly: true,
    secure: process.env.NODE_ENV === 'production' // 生产环境如果用HTTPS请设为true
  }
}));

4. 验证效果

  1. 启动服务后登录一个测试用户
  2. 重启Node.js服务
  3. 刷新应用页面,用户仍保持登录状态即配置成功

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:54:08