根据docs:
会话基本上可以记住一个人的信息 要求另一个人。
但在其他地方,the docs say session
是一个线程的本地。因此,如果在多线程环境中使用flask
(例如,app.run(threaded=True)
),它如何实现此承诺?
我只看到两种选择:
flask
以某种方式确保相同的用户会话始终由同一个线程提供服务(这看起来很糟糕,因为在两个选项卡中浏览的单个用户必须等待他的第一个请求完成才能处理第二个请求)session
完全无用,我需要在数据库中存储特定于会话的信息(这看起来很意外,并且未在文档中提及)我错过了什么吗?
编辑:我想另一种选择是:
session
本身是来自python透视图的线程局部变量(即,python将每个线程的session
看作完全独立的对象),但它在某种程度上通过flask
跨线程同步(可能是一些进程全局内存数据结构)。在这种情况下,flask
可以对session
原子进行所有修改(使用一些线程间同步机制)。更新:基于@Daniel Roseman回答,我的最后一次猜测是正确的,除了烧瓶本身不做,而是要求用户代理存储/检索持久状态(因此,状态不是每个烧瓶过程或每个烧瓶应用程序,而是根据用户代理发生的任何请求集合将状态持续 - 可以称之为用户会话。 / p>
答案 0 :(得分:2)
在您引用的下一句之后:
Flask执行此操作的方式是使用已签名的Cookie。
Flask在发送响应之前将信息存储在cookie中,并在下一个请求开始时将其读回。