我有Nodejs,ReactJS和React Native应用程序,MERN应用程序使用免费的dynos部署在Heroku上。会话在一段时间后自动超时。我希望永远保持会议状态而不会过期。
在初始化会话时,我没有设置任何expiry time
或MaxAge
:
app.use(session({
secret: 'thesecret',
saveUninitialized: false,
resave: false
}))
app.use(passport.initialize());
app.use(passport.session());
我希望在我的ReactJS和React Native应用程序中永远保持会话。我该如何在Heroku上做到这一点?
答案 0 :(得分: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),但是有很多个选项。
答案 1 :(得分:0)
我们可以使用connect-mongodb-session将会话存储在数据库中,并且工作正常。
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,
}))
app.use(passport.initialize());
app.use(passport.session());
答案 2 :(得分: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,
}))