【问题标题】:How do I get a persistent session working with Express.js/Nodemon?如何使用 Express.js/Nodemon 获得持久会话?
【发布时间】:2019-04-09 01:39:52
【问题描述】:

我的 TypeScript 服务器基于 this example project。每当nodemon 重新启动我的服务器时,无论是自动还是手动,我都会丢失会话并且必须重新登录。我讨厌这样做,因为第 1000 次完成时会浪费大量时间。我尝试配置我的 Express.js 会话设置,但似乎没有任何效果。这是我的配置:

/**
* Configure application
*
* @class Server
* @method config
*/
public config() {
    //add static paths
    this.app.use(express.static(path.join(__dirname, 'public')));

    //configure pug
    this.app.set('views', path.join(__dirname, 'views'));
    this.app.set('view engine', 'ejs');

    //use logger middlware
    this.app.use(logger('dev'));

    //use json form parser middlware
    this.app.use(bodyParser.json());

    //use query string parser middlware
    this.app.use(bodyParser.urlencoded({
        extended: true
    }));

    this.app.use(cookieParser("my secret"));
    this.app.use(session({
        name: 'MyStudio',
        secret: "my secret",
        resave: false,
        saveUninitialized: false,
        cookie: {
            maxAge: 86400000,
            httpOnly: true,
            secure: false
        }
    }));
    this.app.use(passport.initialize());
    this.app.use(passport.session());
    //this.app.set('trust proxy', 1) // trust first proxy

    this.app.set('json spaces', 4);

    passport.serializeUser((user, done) => {
        return done(null, user);
    });

    passport.deserializeUser((user, done) => {
        return done(null, user);
    });

    passport.use('local-login', new Local.Strategy(
        (username, password, done) => {
            // My custom login logic
        }
    ));

    this.app.use(methodOverride());
}

如何阻止 Express.js 在每次重启时丢失会话?

【问题讨论】:

  • @robertklep cookie 会话是否在重启时失效?我以为他们是执着的。 cookie store 和MemoryStore一样吗?

标签: node.js typescript express session nodemon


【解决方案1】:

express-session 支持不同的存储(数据库)来存储会话数据。

使用的默认值是MemoryStore,它将会话数据保存在内存中只要 Express 进程运行。当 Express 进程停止时(例如,当它重新启动时),所有会话数据都消失了。

如果您希望会话数据在重启后仍然存在,您需要使用持久会话存储。它们不是将会话数据存储在内存中,而是将会话数据存储在(例如)数据库中。有很多可用的持久会话存储,可以在此处找到其中的列表:https://github.com/expressjs/session#compatible-session-stores

【讨论】:

  • 出于某种原因,我想到MemoryStoreexpress-session 默认使用的cookie 存储不同。感谢您的澄清。
猜你喜欢
  • 1970-01-01
  • 2011-02-28
  • 2017-09-09
  • 1970-01-01
  • 2017-01-08
  • 1970-01-01
  • 2019-07-31
  • 2018-02-13
  • 2012-11-20
相关资源
最近更新 更多