有趣的django会话保存行为

时间:2012-03-18 12:50:56

标签: django django-sessions

如果我清除我的cookie并运行此视图,我会在每个页面加载时获得一个新的会话密钥。

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

如果我在视图和模板中打印会话密钥,则会话密钥被“保存”并且每个页面加载时保持不变。

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

那么如何解释这种行为?

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

1 个答案:

答案 0 :(得分:3)

  

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

     

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

     

请注意,会话cookie仅在会话结束时发送   创建或修改。如果SESSION_SAVE_EVERY_REQUEST为True,则为   会话cookie将在每次请求时发送。

来自when sessions are saved