在两个烧瓶服务器之间共享会话

Sharing sessions between two flask servers

我的后端有两个 Flask 服务器。一个处理所有 RESTfull 请求,一个是 flask-socketio 服务器。有没有办法在这两个应用程序之间共享会话变量(登录用户等)?如果这很重要,他们会 运行 通过不同的端口。

我是如何理解它们通过客户端会话 cookie 工作的会话的,所以这两个服务器不应该都可以访问信息吗?如果是如何?如果没有,有没有办法达到同样的效果?

有几种方法可以解决这个问题,具体取决于您如何设置两个服务器。

最简单的解决方案是让两台服务器在同一域和端口上向客户端显示。例如,您可以将 www.example.com/socket.io 作为 Socket.IO 服务器的根目录,并将 www.example.com 上的任何其他 URL 连接到您的 HTTP 服务器。为此,需要使用反向代理服务器,比如nginx。客户端不直接连接到您的服务器,而是在单个端口上连接到 nginx,并且 nginx 配置为根据 URL.

将请求转发到适当的服务器

通过上述设置,两个服务器都暴露给同一域中的客户端,因此会话 cookie 将被发送到两个服务器。

如果你想让你的服务器与客户端分开显示,那么共享会话数据的一个好选择是切换到服务器端会话,存储在 Redis、内存缓存等中。你可以使用 Flask-Session进行设置。

希望对您有所帮助!

我发现 flask.session.sid = sid_from_another_domain 在处理单个子域的情况下效果很好。

我有几个 Flask 应用程序有单独的域名,例如 A.domain.com、B.domain.com 和 C.domain.com。 它们都基于 flask 并且具有连接到同一个 redis 服务器的 redis 会话管理器。

我想联合他们同时登录和注销。

当我登录 A 并将其传递给域 B 时,我必须将会话 ID 与用户信息一起保存在数据库上。 这些域使用 oauth2 协议进行通信,在这种情况下我使用 flask_dance。 并在B域上设置为flask.session.sid。 然后我可以确认这个实现工作正常。