node.js - 如何使用户会话无限期地保持活动状态?
问题描述
我有 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 上做到这一点?
解决方案
看起来您没有配置您的store
,这意味着您使用的是默认值MemoryStore
:
警告默认的服务器端会话存储,
MemoryStore
故意不是为生产环境设计的。它在大多数情况下会泄漏内存,不会扩展到单个进程,并且用于调试和开发。有关商店列表,请参阅兼容的会话商店。
Heroku dynos频繁重启,至少每天一次,以保持应用程序和基础设施的健康,即使没有先前的警告,内存存储也变得不切实际。
您将不得不选择一个新的会话存储并对其进行配置。Heroku 的文件系统是短暂的,所以请避免任何将其数据存储在本地磁盘上的东西。选择一个使用Heroku 插件中列出的数据存储的可能是有意义的。PostgreSQL 后端之一可能是一个不错的选择(您可能已经拥有Heroku Postgres 数据库),但有很多选择。
推荐阅读
- android - Android:使用 viewModelscope 和 withContext 时不可能出现 NullPointerException
- python-3.x - 如何使用 Gekko 释放变量
- c++ - 如何为每个活动线程块处理重用全局内存的唯一部分?
- javascript - chrome 上的语音合成器只播放前 200 个字符
- spring-boot - 在 JBoss EAP 7.1.0 中部署 Spring Boot 应用程序时创建名为“undertowServletWebServerFactory”的 bean 时出错
- angular - Angular ng-select:GroupBy 数组 ng-select
- libvlc - 如何在 python-vlc 中获取比特率、采样率和每个样本的位数
- flutter - Flutter 不会在容器中着色
- networking - 内核是否应该将数据从 Tap 接口传递到侦听 INADDR_ANY 的应用程序?
- java - Java 提取 .cab 文件