在 Node.js 服务器重新启动时保持用户会话登录

Keep user sessions logged in on Node.js server restart

我正在使用 express-session 作为我 Node.js 网络应用程序用户的登录系统。我的问题是,每次我进行更新并重新启动 Node.js 服务器时,所有用户都会注销,这不是理想的行为(有多个用户通过本地网络登录,我想不必每次重新启动时重新登录。

根据我的理解,我可以使用诸如 connect-pg-simple 之类的东西(供参考,我在我的节点网络应用程序中使用 postgres 数据库)让用户在服务器重启时保持登录状态,但我不确定如何实现这个。

我知道会是这样的:

app.use(session({
    store: new (require('connect-pg-simple')(session))({
        // Insert connect-pg-simple options here
    }),
    secret: 'secret',
    resave: false,
    saveUninitialized: true
}));

但我不知道使用什么选项或如何在服务器重新启动时保存用户会话。

您的会话存储在应用运行时,因此在刷新时,它会在服务器重启时重置它可能在运行时保存的所有其他数据

是的,你走在正确的轨道上。

  1. 打开您的数据库并创建一个 table 命名会话。参见:https://github.com/voxpelli/node-connect-pg-simple/blob/HEAD/table.sql
  2. 像您发布的那样添加 connect-pg-simple 代码
  3. 从 node-pg 传递您正在使用的 postgres 池。

const session = require('express-session') const PGSessionStore = require('connect-pg-simple')(会话) const pg = require('pg')

const pool = new pg.Pool({
  user: process.env.PG_USERNAME,
  host: process.env.PG_HOST,
  database: process.env.PG_DATABASE,
  password: process.env.PG_PASSWORD,
  port: process.env.PG_PORT
})

app.use(session({
    store: new PGSessionStore({
      pool: pool,
      tableName: 'session'
    }),
    secret: process.env.COOKIE_SECRET,
    cookie: {
      secure: false,
      httpOnly: true,
      sameSite: true,
      maxAge: 24 * 60 * 60 * 1000
    },
    saveUninitialized: true,
    resave: false
}))