Mysql 如何在nodejs中跨服务器共享会话?

Mysql 如何在nodejs中跨服务器共享会话?,mysql,node.js,session,amazon-web-services,Mysql,Node.js,Session,Amazon Web Services,我想创建一个无状态服务器,这样,如果任何服务器宕机,loadbalancer都可以将请求重定向到其他服务器。但是,如果会话是在一台服务器上创建的,它会停止,那么如何将其持久化。我使用mysqlstore将会话持久化到数据库中,但对于每台服务器,它会在数据库中创建一条新记录,因此会话id不会在不同的服务器之间共享。因此,需要一种使服务器无状态的机制。我猜您使用的是express session,因为没有另外指出它 您使用mysqlstore的方法是正确的。这里绕过节点单线程的方法是抛弃expres

我想创建一个无状态服务器,这样,如果任何服务器宕机,loadbalancer都可以将请求重定向到其他服务器。但是,如果会话是在一台服务器上创建的,它会停止,那么如何将其持久化。我使用mysqlstore将会话持久化到数据库中,但对于每台服务器,它会在数据库中创建一条新记录,因此会话id不会在不同的服务器之间共享。因此,需要一种使服务器无状态的机制。

我猜您使用的是
express session
,因为没有另外指出它

您使用mysqlstore的方法是正确的。这里绕过节点单线程的方法是抛弃
express session
,而是加密会话数据并将其放入客户端cookie中。然后,您可以对GET请求中的会话数据进行解密,并使用cookie中的隔离密钥在数据库中验证它(或者创建新的会话/cookie对,如果不存在)

最流行的Node.js中间件是
cookie会话。
那里的文档也很棒


顺便说一句,因为听起来你现在处在一个非常可扩展的地方,有多台服务器,所以不管怎么说,抛弃
express session
是值得的<代码>快速会话使用MemoryStore,这是一个已知的内存泄漏问题。对于较小的项目可以使用,但对于较大的项目可能应该重新考虑。

我猜您使用的是
express session
,因为没有其他说明

您使用mysqlstore的方法是正确的。这里绕过节点单线程的方法是抛弃
express session
,而是加密会话数据并将其放入客户端cookie中。然后,您可以对GET请求中的会话数据进行解密,并使用cookie中的隔离密钥在数据库中验证它(或者创建新的会话/cookie对,如果不存在)

最流行的Node.js中间件是
cookie会话。
那里的文档也很棒


顺便说一句,因为听起来你现在处在一个非常可扩展的地方,有多台服务器,所以不管怎么说,抛弃
express session
是值得的<代码>快速会话使用MemoryStore,这是一个已知的内存泄漏问题。对于较小的项目可以使用,但对于较大的项目可能应该重新考虑。

根据定义,无状态应用程序不会维护会话。会话是状态。你确定你问的问题是对的吗?如果服务器宕机,你不必担心重定向。AWS ELB自动将其标记为不健康,并将流量发送到连接到负载平衡器的另一个运行状况服务器。如果实例出现故障,则使用应用程序控制的会话粘性@error2007s会话粘性对用户没有帮助,这就是OP试图解决的问题。我建议应用程序控制会话粘性,因此粘性将取决于应用程序生成的cookie。因此,如果服务器宕机,该服务器上就没有cookie。根据定义,无状态应用程序不会维护会话。会话是状态。你确定你问的问题是对的吗?如果服务器宕机,你不必担心重定向。AWS ELB自动将其标记为不健康,并将流量发送到连接到负载平衡器的另一个运行状况服务器。如果实例出现故障,则使用应用程序控制的会话粘性@error2007s会话粘性对用户没有帮助,这就是OP试图解决的问题。我建议应用程序控制会话粘性,因此粘性将取决于应用程序生成的cookie。因此,如果服务器宕机,则该服务器不会发出任何cookie。