Django 1.5会话密钥为无

时间:2013-05-04 03:39:59

标签: django

出于某种原因,在模板中执行{{ request.session.session_key }}会给出None值。经过一些搜索后,遇到了使用request.session._session_id提到的this post,但在模板中使用它会给我一个错误:

  

变量和属性不能以下划线开头:   ' request.session._session_key'

我对Django中会话的理解是,当用户加载页面(任何页面)时,即使他是匿名的,也会将session_id分配给该特定会话。我的理解是错的吗?这是using [SESSION_SAVE_EVERY_REQUEST]应该出现的地方吗?

我使用数据库后端作为我的会话存储。

1 个答案:

答案 0 :(得分:30)

回答我自己的问题:

仍然可以使用{{ request.session.session_key }}访问会话密钥。但是,docs提到只有在您保存/修改会话时才会创建会话。

  

默认情况下,Django仅在会话时保存到会话数据库   已修改 - 即它的任何字典值已被修改   已分配或删除:

所以在我的情况下,会话没有被设置,因为我没有操纵它。使用SESSION_SAVE_EVERY_REQUEST确实可以解决全球问题。在我的用例中,我只需要在特定的视图函数上使用它,这样做很简单:

if not request.session.get('has_session'):
    request.session['has_session'] = True