首页 > 解决方案 > 如何使用户会话无限期地保持活动状态?

问题描述

我有 Nodejs、ReactJS 和 React Native 应用程序,MERN 应用程序使用免费的测功机部署在 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 上做到这一点?

标签: node.jsherokupassport.jsexpress-session

解决方案


看起来您没有配置您的store,这意味着您使用的是默认值MemoryStore

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

有关商店列表,请参阅兼容的会话商店

Heroku dynos频繁重启,至少每天一次,以保持应用程序和基础设施的健康,即使没有先前的警告,内存存储也变得不切实际。

您将不得不选择一个新的会话存储并对其进行配置。Heroku 的文件系统是短暂的,所以请避免任何将其数据存储在本地磁盘上的东西。选择一个使用Heroku 插件中列出的数据存储的可能是有意义的。PostgreSQL 后端之一可能是一个不错的选择(您可能已经拥有Heroku Postgres 数据库),但有很多选择。


推荐阅读