【发布时间】:2013-03-12 18:08:55
【问题描述】:
我有以下 REST 方法,每次单击 jQuery 选项卡以存储活动选项卡时更新会话的值。
@csrf_exempt
def update_active_tab_request(request):
"""
Stores the active tab for a given tab item
"""
for tab, active in request.GET.iteritems():
request.session[tab] = int(active)
return HttpResponse("OK", status=200)
这是一个相当简单的例程,我遇到的问题是该值并不总是存储在会话中。我查看了 Web 服务器日志,并添加了日志语句来验证代码是否被调用。一切似乎都在工作,但我发现当此方法返回时会话可能尚未更新。
考虑到更新会话可能是性能/同步问题,我已将会话存储更改为 SESSION_ENGINE='django.contrib.sessions.backends.cache' 。但这没有帮助。我还将SESSION_SAVE_EVERY_REQUEST=True 设置为始终保存会话。这也没有帮助。
我无法解释这种行为。任何有助于阐明问题的帮助将不胜感激。
【问题讨论】:
-
您是否检查过问题不在于您的会话即将到期?默认情况下
SESSION_COOKIE_AGE如果您没有修改它应该是 2 周。另外,您在不尝试使用SESSION_ENGINE='django.contrib.sessions.backends.cache'时使用的是什么存储 -
会话没有过期,我正在使用 memcached 后端。切换到默认数据库会话后端并没有什么不同。问题依然存在。
-
缓存是否被填满了?如果将缓存用于会话,则无法保证它会被持久化,除非您使用
cache_dbdocs.djangoproject.com/en/dev/topics/http/sessions/… -
我认为这与缓存已满无关。无论会话引擎如何,都会出现我面临的问题。我只是切换到缓存后端来测试一下。