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连接池实例,复用连接资源,不需要再单独配置conStringtableName:自定义存储会话的表名,不填默认是sessioncreateTableIfNotExists:设为true时,服务首次启动会自动创建会话表,不需要手动执行建表SQLttl:会话过期时间,单位为秒,默认取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. 验证效果
- 启动服务后登录一个测试用户
- 重启Node.js服务
- 刷新应用页面,用户仍保持登录状态即配置成功
内容的提问来源于stack exchange,提问作者NicLovin
相关产品推荐
相关产品推荐

