Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在群集模式下运行pm2时重定向后,请求会话数据丢失_Node.js_Session_Express_Pm2 - Fatal编程技术网

Node.js 在群集模式下运行pm2时重定向后,请求会话数据丢失

Node.js 在群集模式下运行pm2时重定向后,请求会话数据丢失,node.js,session,express,pm2,Node.js,Session,Express,Pm2,我们正在运行一个node.js应用程序,其中包含express 4.6.1 cookie parser 1.3.2 connect flash 0.1.1和express session 1.7.0 我们使用flash在重定向后在页面上显示消息,有时在req.session中存储数据,以便在用户出错并需要重新输入时自动填写表单。最近,我们开始在集群模式下使用pm2,大多数事情似乎都很好,但我们注意到,在重定向后,我们丢失了闪存数据和存储在req.session中的数据 以下是一个例子:

我们正在运行一个node.js应用程序,其中包含express 4.6.1 cookie parser 1.3.2 connect flash 0.1.1和express session 1.7.0

我们使用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);
这来自一个端点,该端点在用户尝试注册但出现某种错误后接受请求。如果在没有群集模式的情况下运行,会话数据和闪存都会正确显示,但如果在群集模式下运行,它们几乎总是丢失(不总是:/)


在群集模式下是否有更好的方法来执行此操作?

除非您使用Redis、Memcache或其他进程来存储会话数据,否则您将无法使用多个节点进程来处理请求。目前,您的应用程序仅使用
express session
存储会话数据,默认情况下,会话数据仅存储在内存中

请参阅上面链接中的警告部分

当您使用集群模块运行应用程序时,它将为每个应用程序实例派生不同的进程。如果您不做一些工作,这些进程就无法直接共享内存,这意味着当请求以循环方式分发到应用程序实例时,任何不在同一进程结束的请求都无法将其cookie与服务器端会话存储相关联


我建议您将会话存储更改为更适合生产的存储,如Redis或Memcache。如果你使用Redis,你可能想看看如何使用它。

我也有同样的问题。从使用内存进行快速会话切换到memcached后,pm2集群模式下一切正常