【发布时间】:2013-03-11 06:02:20
【问题描述】:
我正在使用最新的 Flask/Werkzeug (Flask 0.9) 客户端会话在请求之间保留信息。会话未设置为持久(因为我可以在关闭浏览器时删除 cookie)。
我的问题如下:
我使用一些服务器端代码来用一个条目填充 Flask 会话变量。之后,Session 变量看起来像这样:
<SecureCookieSession {u'items': SOMENOTVERYIMPORTANTDICTIONARY}, '_fresh': True, 'user_id': u'1', 'csrf': '0aef1995cdf2cxx0233fdf3321d17fc7267f3b32', '_id': 'someUNIQUEcode'}*>
我使用此信息将执行 GET 请求(通过 JQuery)的页面呈现给同一个 Flask 应用程序,但突然包含会话中“项目”条目的字典消失了:
<SecureCookieSession {'_fresh': True, 'user_id': u'1', 'csrf': '0aef1995cdf2cxx0233fdf3321d17fc7267f3b32', '_id': 'someUNIQUEcode'}>
我做了一些搜索,并认为这可能与我在 localhost 上测试的事实有关(127.0.0.1 与 localhost 不同)。我修复了我的主机文件并添加了一个“dev.localhost”条目以确保所有请求都来自同一主机。
另外,我的浏览器 (Chrome) 的开发者面板显示了与发送到服务器的会话 cookie 完全相同的标识符。
另外,设置session.modified = True 也无济于事。
请求之间唯一变化的是
__utmb=122666782.18.10.1363877633
对于第一个请求(填充 items 条目的请求)与第二个请求
__utmb=122666782.19.10.1363877633
认为它仍然可能与 Ajax 相关。在直接重新加载页面后,我测试了会话变量的内容:items 条目仍然从会话中消失。
任何帮助将不胜感激。
【问题讨论】:
-
仅删除了
items条目还是您在会话中设置的任何内容? -
@codegeek 我在发布我的问题之前查看了该条目,并认为它可能是跨主机 cookie 问题。我将主机名设置为
localhost.dev,以避免localhost和127.0.0.1之间的混淆。另外,我尝试在 Flask 配置中明确设置 cookie 和服务器域,但这也没有帮助。 -
@SeanVieira 好建议。我尝试在会话中添加一个
test条目,但它没有坚持下去。但是,其他服务器端代码(用于 OAuth 的东西)也添加了条目,并且这些条目 do 保持不变。我是否应该在 JQuery GET 请求中明确设置一些内容? (注意:这段代码正在从 Django 迁移到 Flask,在 Django 中一切正常) -
附加信息:第一个响应确实在响应 cookie 中将
items条目发送回客户端,但第二个 (jQuery GET) 请求不会将items条目发送回服务器.
标签: python jquery flask session-variables session-cookies