根据我的理解here session_key是会话对象的主键。
当我检查request.session时,我找到了一个会话对象,但没有设置它的主键。它似乎未得救。所以现在我通过检查每个视图是否存在request.session.session_key来解决这个问题,如果不存在,则调用save()。
有没有人解释为什么我似乎只能抓住未保存的会话对象?
答案 0 :(得分:3)
如果您的会话设置正确,可能会有两件事情发生:
会话保存在请求的 end 中。即使会话非空,在响应中间件运行之前它也不会有主键。下一个请求中的会话将具有主键。
始终删除空会话。如果您的会话不包含任何数据,则会清除会话和cookie,并且下一个请求将具有空主会话的空会话。
这些都是会话正常工作时的有效方案。即使使用SESSION_SAVE_EVERY_REQUEST
,仍会清空空会话。
如果由于某种原因未设置会话cookie,或者它无效(因为它已被篡改),会话密钥也将设置为None
。