7

我一直在使用Flask 登录模块,它在服务器上创建和维护会话。

由于服务器维护会话,我认为它不是完全无状态的。当应用程序有多个服务器时它是如何工作的。请求是否应该是粘性的(即给定的会话应该向特定服务器发出后续请求)?

4

1 回答 1

17

你所做的这个陈述并不完全正确:

...在服务器上创建和维护会话。

Flask-Login 使用 Flask 提供的会话设施,因此它存储在会话中的数据将由 Flask 使用配置的会话存储机制写入。

默认情况下,Flask 将用户会话作为安全 cookie 写入客户端,但服务器上的会话也是可能的。例如,这个片段展示了如何配置 Flask 以在服务器端 Redis 存储上写入会话。

当用户会话存储在客户端 cookie 中时,很明显拥有多个服务器不是问题。cookie 将被发送到处理每个请求的服务器,所以一切都会正常工作。

对于服务器端会话,这也适用。服务器端会话被写入一个唯一标识符,然后这个唯一标识符存储在客户端 cookie 中。然后每个请求都带有会话 ID,Flask 使用这个 ID 来加载会话数据。如果您将所有 Web 服务器配置为使用相同的用户会话存储,那么多个服务器可以毫无问题地处理来自同一客户端的请求。

于 2013-09-29T23:07:01.753 回答