request.session.session_key 尽管 SESSION_SAVE_EVERY_REQUEST 未设置(Django 1.10.1)
request.session.session_key not set despite SESSION_SAVE_EVERY_REQUEST (Django 1.10.1)
据我了解here session_key是会话对象的主键。
当我检查 request.session 时,我确实找到了一个会话对象,但它的主键没有设置。好像没救了。所以现在我通过检查每个视图是否存在 request.session.session_key 来解决这个问题,如果不存在,调用 save().
有谁能解释为什么我似乎只能接触到未保存的会话对象?
如果您的会话设置正确,可能会发生两件事:
会话在请求的结束 时保存。即使会话非空,在响应中间件有 运行 之前,它也不会有主键。下一个请求中的会话将有一个主键。
总是删除空会话。如果您的会话不包含任何数据,会话和 cookie 将被清除,下一个请求将有一个空会话,主键为空。
当会话正常工作时,这些都是有效的场景。即使 SESSION_SAVE_EVERY_REQUEST
,空会话仍会被清除。
如果由于某种原因未设置会话 cookie,或者它无效(因为它已被篡改),会话密钥也将设置为 None
。
据我了解here session_key是会话对象的主键。
当我检查 request.session 时,我确实找到了一个会话对象,但它的主键没有设置。好像没救了。所以现在我通过检查每个视图是否存在 request.session.session_key 来解决这个问题,如果不存在,调用 save().
有谁能解释为什么我似乎只能接触到未保存的会话对象?
如果您的会话设置正确,可能会发生两件事:
会话在请求的结束 时保存。即使会话非空,在响应中间件有 运行 之前,它也不会有主键。下一个请求中的会话将有一个主键。
总是删除空会话。如果您的会话不包含任何数据,会话和 cookie 将被清除,下一个请求将有一个空会话,主键为空。
当会话正常工作时,这些都是有效的场景。即使 SESSION_SAVE_EVERY_REQUEST
,空会话仍会被清除。
如果由于某种原因未设置会话 cookie,或者它无效(因为它已被篡改),会话密钥也将设置为 None
。