为什么Flask Security会为每个请求创建新的KVSession记录?
我正在尝试使用作为Flask网站的替代会话实现。我已经创建了一个测试网站(请参见下面的代码1)。运行此操作时,我可以使用浏览器在web浏览器中的各种资源之间导航,从而将值存储到会话中。这是正确的。另外,当我查看生成的SQLite数据库中的为什么Flask Security会为每个请求创建新的KVSession记录?,flask,flask-sqlalchemy,flask-security,flask-kvsession,Flask,Flask Sqlalchemy,Flask Security,Flask Kvsession,我正在尝试使用作为Flask网站的替代会话实现。我已经创建了一个测试网站(请参见下面的代码1)。运行此操作时,我可以使用浏览器在web浏览器中的各种资源之间导航,从而将值存储到会话中。这是正确的。另外,当我查看生成的SQLite数据库中的sessions表时,我看到一条记录,它一直用于存储此会话 然后,我尝试添加到这一点(请参见下面的代码2)。运行此站点后(确保首先删除现有的test.db sqlite文件),我将进入登录提示并登录。然后我继续做同样的事情,在资源之间来回跳跃。我得到了同样的结果
sessions
表时,我看到一条记录,它一直用于存储此会话
然后,我尝试添加到这一点(请参见下面的代码2)。运行此站点后(确保首先删除现有的test.db sqlite文件),我将进入登录提示并登录。然后我继续做同样的事情,在资源之间来回跳跃。我得到了同样的结果
问题是,当我查看sqlitebrowsersessions
表时,有8条记录。结果是,为每个请求创建了一个新的会话记录
为什么在使用Flask Security时为每个请求创建一个新的会话记录?为什么现有会话没有像以前一样更新
代码1(无Flask安全的KVSession)
代码2(KVSession与Flask Security)
版本信息
Python 2.7.3
Flask==0.9
Flask==0.9
Flask-KVSession==0.3.2
Flask-Login==0.1.3
Flask-Mail==0.8.2
Flask-Principal==0.3.5
Flask-SQLAlchemy==0.16
Flask-Security==1.6.3
SQLAlchemy==0.8.1
当flask登录与KVSession这样的会话存储库一起使用时,这与with(flask安全性使用的)有关 基本上,每当创建或修改会话中的数据时,KVSession都需要使用新的会话信息更新数据库。在上面的示例中,这是正确的:当我第一次点击页面时,会话被创建。之后,将更新现有会话 但是,在后台,浏览器会向我的web服务器发送一个无cookie请求,以查找我的favicon。因此,flask正在处理对
/favicon.ico
的请求。此请求(或任何其他404请求)仍由flask处理。这意味着flask登录将查看请求并尝试执行其神奇的操作
碰巧flask login没有尝试将任何内容放入会话中,但就KVSession而言,会话似乎已经被修改。由于会话看起来已被修改,KVSession将更新数据库。以下是flask登录的代码:
def _update_remember_cookie(self, response):
operation = session.pop("remember", None)
...
在请求生命周期中调用\u update\u memory\u cookie
方法。虽然session.pop不会在会话没有“记住”键(在本例中没有)的情况下更改会话,但KVSession仍会看到一个pop并假定会话已更改
flask登录的问题提供了简单的bug修复,但它还没有被推到flask登录中。看来维护人员正在寻找一个完整的重写,并将在那里实现它
Python 2.7.3
Flask==0.9
Flask==0.9
Flask-KVSession==0.3.2
Flask-Login==0.1.3
Flask-Mail==0.8.2
Flask-Principal==0.3.5
Flask-SQLAlchemy==0.16
Flask-Security==1.6.3
SQLAlchemy==0.8.1
def _update_remember_cookie(self, response):
operation = session.pop("remember", None)
...