Mik*_*012 3 session node.js express pm2
我们正在运行带有express 4.6.1 cookie解析器1.3.2 connect-flash 0.1.1和express会话1.7.0的node.js应用。
重定向后,我们使用Flash在页面上显示消息,有时将数据存储在req.session中,以便在用户犯错并需要重新输入时自动填写表格。最近,我们开始在集群模式下使用pm2,大多数情况似乎都可以正常工作,但我们注意到重定向后丢失了闪存数据和存储在req.session中的数据。
这是一个例子:
req.flash("signup", errorString);
req.session.storedData = {};
req.session.storedData.username = "";
req.session.storedData.password = req.body.password;
req.session.storedData.email = req.body.email;
req.session.storedData.emailConfirm = req.body.emailConfirm;
res.redirect(problemRedirectPath);
Run Code Online (Sandbox Code Playgroud)
这来自一个端点,该端点在用户尝试注册后接受请求,但存在某种错误。如果我们在无集群模式下运行,则会话数据和闪存都可以正确显示,但如果在集群模式下运行,则它们几乎总是丢失(并非总是:/)
是否有更好的方法在群集模式下执行此操作?
除非您使用Redis,Memcache,其他用于存储会话数据的进程,否则您将不能使用多个Node进程来处理请求。现在,您的应用仅express-session用于存储会话数据,默认情况下,该会话数据仅将会话数据存储在内存中。
https://github.com/expressjs/session#sessionoptions
请参阅以上链接中的警告部分。
当您使用集群模块运行应用程序时,它将为每个应用程序实例派生一个不同的进程。这些过程无法直接共享内存,而无需您自己做一些工作,这意味着当将请求循环分发到应用程序实例时,任何不在同一进程中结束的请求将无法将其cookie与服务器端会话存储。
我建议将会话存储更改为更适合生产的内容,例如Redis或Memcache。如果使用Redis,则可能需要使用connect-redis。
| 归档时间: |
|
| 查看次数: |
1781 次 |
| 最近记录: |