如何让用户会话无限期保持活力?

问题描述 投票:0回答:2

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

我在初始化会话时没有设置任何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
2个回答
0
投票

看起来你没有配置你的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),但有很多选择。


0
投票

通过在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,
}))
© www.soinside.com 2019 - 2024. All rights reserved.