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

时间:2016-06-23 18:08:34

标签: mysql node.js session amazon-web-services

我想创建一个无状态服务器,这样如果任何服务器出现故障,负载均衡器可以将请求重定向到其他服务器。但是如果会话是在一台服务器上创建的,那么它就会停止运行。我使用mysqlstore来保存我在数据库中的会话,但对于每台服务器,它会在数据库中创建一条新记录,因此会话ID不会被共享不同的服务器因此,需要一种使服务器无状态的机制。

1 个答案:

答案 0 :(得分:2)

我猜你正在使用express-session,因为它没有另外说明。

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

最流行的Node.js中间件就是cookie-session.那里有很棒的文档。

https://github.com/expressjs/cookie-session

作为旁注,由于听起来你现在使用多台服务器处于一个相当可扩展的地方,所以无论如何都值得放弃express-sessionexpress-session使用MemoryStore,它存在内存泄漏的已知问题。适用于较小的项目,但可能应该重新考虑较大的项目。