【问题标题】:How can I keep user sessions alive indefinitely?如何使用户会话无限期地保持活动状态?
【发布时间】:2019-08-24 14:20:16
【问题描述】:

我有 Nodejs、ReactJS 和 React Native 应用程序,MERN 应用程序使用免费的 dynos 部署在 Heroku 上。会话在一段时间后自动超时。我希望永远保持会话而不会过期。

在初始化会话时我没有设置任何expiry timeMaxAge

app.use(session({
  secret: 'thesecret',
  saveUninitialized: false,
  resave: false
}))

app.use(passport.initialize());
app.use(passport.session());

我希望在我的 ReactJS 和 React Native 应用程序中永远保持会话。我怎样才能在 Heroku 上做到这一点?

【问题讨论】:

    标签: node.js heroku passport.js express-session


    【解决方案1】:

    您似乎没有配置您的store,这意味着you're using the default MemoryStore

    警告默认的服务器端会话存储 MemoryStore故意不是为生产环境设计的。它在大多数情况下都会泄漏内存,不会扩展到单个进程之外,并且适用于调试和开发。

    有关商店列表,请参阅compatible session stores

    Heroku dynos restart frequently,每天至少一次,以维护应用程序和基础架构的健康,即使没有先前的警告,内存存储也变得不切实际。

    您将不得不选择一个新的session store 并对其进行配置。 Heroku 的文件系统is ephemeral,所以请避免任何将其数据存储在本地磁盘上的东西。选择一个使用data store listed among Heroku's addons 的可能是有意义的。 PostgreSQL 后端之一可能是一个不错的选择(您可能已经有一个Heroku Postgres database),但是有很多个选项。

    【讨论】:

      【解决方案2】:

      通过在 mongodb 数据库中保存会话,我们可以在我们的 nodeJS 应用程序中保持一个连续的会话。

      var MongoDBStore = require('connect-mongodb-session')(session);
      var store = new MongoDBStore({
      uri: process.env.MONGODB_URI,
        collection: 'mySessions'
      });
      
      // Catch errors
      store.on('error', function(error) {
        console.log(error);
      });
      app.use(session({
        secret: 'thesecret',
        saveUninitialized: false,
        resave: false,
        cookie: {expires: new Date(1586323351000),maxAge:31536000000},
        store: store,
      }))
      

      【讨论】:

        猜你喜欢
        • 2012-02-06
        • 2012-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-20
        • 1970-01-01
        • 1970-01-01
        • 2014-03-16
        相关资源
        最近更新 更多