9

我正在使用最新的 Flask/Werkzeug (Flask 0.9) 客户端会话来保留请求之间的信息。会话未设置为持久(因为我可以在关闭浏览器时删除 cookie)。

我的问题如下:

我使用一些服务器端代码来用一个条目填充 Flask 会话变量。在此之后,Session 变量看起来像这样:

<SecureCookieSession {u'items': SOMENOTVERYIMPORTANTDICTIONARY}, '_fresh': True, 'user_id': u'1', 'csrf': '0aef1995cdf2cxx0233fdf3321d17fc7267f3b32', '_id': 'someUNIQUEcode'}*>

我使用这些信息来呈现一个对同一个 Flask 应用程序执行 GET 请求(通过 JQuery)的页面,但是突然包含会话中“项目”条目的字典消失了:

<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条目仍然从会话中消失。

任何帮助将不胜感激。

4

1 回答 1

11

事实证明,发送回客户端 (Chrome) 的 cookie 超过了 cookie 大小的 4096 字节限制。显然 Django 默认使用服务器端会话,这使得这个问题仅在我将代码移动到 Flask 时出现。在 Flask 中使用服务器端会话,例如在flask-kvsession和其他中应该可以解决这个问题。

于 2013-03-22T09:56:07.647 回答