2012-03-18 24 views
1

如果我清除我的cookies并运行此视图,我会为每个页面加载获取新的会话密钥。耐人寻味的Django会话保存行为

如果我注释掉打印并在模板中输出会话密钥,每次加载新的会话密钥。

如果我在视图和模板中均打印会话密钥,则会话密钥将'保存'并保持每页加载相同。

def view_session(request): 
    print request.session.session_key 
    return render(request, "view_session.html", {}) 

那么如何解释这种行为呢?

这不仅仅是两个读取,因为我可以在视图中打印两次并仍然获得新的密钥。

回答

3

默认情况下,Django的只是保存到当会话 已被修改的会话数据库 - 也就是它的字典值已被 分配或删除

要更改此默认行为,设置SESSION_SAVE_EVERY_REQUEST 设置为True。当设置为True时,Django会将会话保存到每个请求的 数据库。

请注意,会话cookie仅在创建或修改会话 时才会发送。如果SESSION_SAVE_EVERY_REQUEST为True,则会在每个请求上发送会话cookie。

when sessions are saved

+0

好的,但我没有修改会话。 – mobiletim 2012-03-18 13:00:03

+0

谢谢,但问题的关键在于理解行为发生的原因,而不仅仅是如何改变它。 – mobiletim 2012-03-18 13:03:26

+0

用您的查看代码更新您的问题。你不应该直接访问会话属性,只能作为字典。 – 2012-03-18 13:03:31