尽管SESSION_SAVE_EVERY_REQUEST(Django 1.10.1)

时间:2016-09-21 17:25:02

标签: django django-sessions

根据我的理解here session_key是会话对象的主键。

当我检查request.session时,我找到了一个会话对象,但没有设置它的主键。它似乎未得救。所以现在我通过检查每个视图是否存在request.session.session_key来解决这个问题,如果不存在,则调用save()。

有没有人解释为什么我似乎只能抓住未保存的会话对象?

1 个答案:

答案 0 :(得分:3)

如果您的会话设置正确,可能会有两件事情发生:

  • 会话保存在请求的 end 中。即使会话非空,在响应中间件运行之前它也不会有主键。下一个请求中的会话将具有主键。

  • 始终删除空会话。如果您的会话不包含任何数据,则会清除会话和cookie,并且下一个请求将具有空主会话的空会话。

这些都是会话正常工作时的有效方案。即使使用SESSION_SAVE_EVERY_REQUEST,仍会清空空会话。

如果由于某种原因未设置会话cookie,或者它无效(因为它已被篡改),会话密钥也将设置为None