【问题标题】:intriguing django session save behavior有趣的 django 会话保存行为
【发布时间】:2012-03-18 21:50:57
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: django django-sessions


    【解决方案1】:

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

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

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

    来自when sessions are saved

    【讨论】:

    • 谢谢,但问题实际上是关于理解为什么会发生这种行为,而不仅仅是如何改变它。
    • 用您的视图代码更新您的问题。您不应该直接访问会话属性,只能作为字典访问。
    猜你喜欢
    • 1970-01-01
    • 2011-05-09
    • 2016-07-31
    • 1970-01-01
    • 2012-01-17
    • 2020-01-23
    • 2017-10-04
    • 2017-01-14
    • 2012-09-11
    相关资源
    最近更新 更多