12

出于某种原因,{{ request.session.session_key }}在模板中做给了我一个None价值。经过一番搜索,发现这篇文章提到使用request.session._session_id但在模板中使用它会给我一个错误:

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

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

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

4

1 回答 1

31

回答我自己的问题:

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

默认情况下,Django 仅在会话被修改时才保存到会话数据库中——也就是说,如果它的任何字典值已被分配或删除:

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

if not request.session.get('has_session'):
    request.session['has_session'] = True
于 2013-05-13T14:20:12.877 回答