【发布时间】:2015-02-26 15:50:50
【问题描述】:
将会话后端设置为数据存储区将无法正常工作,因为每次调用 auth.get_user_by_session() 都会导致会话实体的数据存储区发生 put(),即使您没有修改会话值。
这是因为调用 auth.get_user_by_session() 调用了 auth.get_session_data(pop=True)。 Pop=True 确实会从会话字典对象(来自 webapp2_extras.sessions 的 SessionDict)中弹出 _user,这会导致会话将属性 modified 设置为 True。
因此,当处理程序完成它的任务时,处理程序调度方法中对 save_session 的调用将检查会话是否已修改,如果为 True(始终为 TRUE!!!)将执行放入数据存储区。
因此,对于每个请求,会话都会被放入数据存储区,因为显然您在每个请求上都调用了 auth.get_user_by_session()。
我不知道如何处理这个问题,但我已经在 google 代码项目页面中打开了一个问题(似乎已被废弃): https://code.google.com/p/webapp-improved/issues/detail?id=100&sort=-id
谁能帮我理解这里发生了什么?我该如何解决这个问题?
【问题讨论】:
-
你的问题的标题有点偏离......我认为 webapp2_extras.sessions 的行为符合预期,并且使用的后端不相关。您遇到的问题是 webapp2_extras.auth (我从未使用过它,但它对我来说看起来也很错误/很奇怪,因为这是值得的)。
-
完全正确.. 我改了标题。问题出在 auth 模块上。为什么 get_session_data 从会话中弹出用户??
标签: google-app-engine python-2.7 webapp2