【问题标题】:How to check session without creating new one?如何在不创建新会话的情况下检查会话?
【发布时间】:2012-10-23 17:42:41
【问题描述】:

在我的应用程序的一部分中,我为访问者提供了一些自定义设置。 当用户加载页面时,我尝试检查请求的自定义设置,如果设置存在,我会在页面中进行自定义。

我在Template Context Processor 做这件事

def shared_values(request):

    show_help = request.session.get('show_help', True)
    return {
        'show_help': show_help,
    }

这是完美的工作,但我有问题 - 每次,当我检查 session django 如果条目之前不存在,则在 Session 表中创建新条目。

如何在不创建新会话的情况下检查会话?

编辑 1:

然后我禁用检查会话密钥,我看到 django 没有为请求创建任何会话条目。

  1. 我在第一个浏览器 (chrome) 中以管理员身份登录并删除所有会话(我自己的会话除外)
  2. 编辑上下文处理器,所以我不访问我的项目中的会话:

    show_help = 真

  3. 在不同的浏览器(firefox)中打开页面

  4. 切换到第一个浏览器并检查是否出现了新的会话对象,但没有任何变化 - 只存在一个会话对象。

编辑 2:

我使用 django 1.4.1

【问题讨论】:

    标签: django django-sessions


    【解决方案1】:

    Docs:

    SessionMiddleware 被激活时,每个HttpRequest 对象—— 任何 Django 视图函数的第一个参数 - 将有一个 session 属性,这是一个类似字典的对象。

    因此,每次您提出请求时,如果会话尚不存在,则会创建会话。 当应用context_processor 时 - 会话已经存在。你不应该担心这个。

    【讨论】:

    • 其实这不是真的。因为那时我禁用了对会话密钥的检查,所以我看到 django 没有创建任何会话条目。
    • 我做了一个实验。我删除了数据库中的所有会话条目,并在第一个 context_processor 的第一行设置了一个断点。我运行 debug ,进程在断点处停止,我查看了数据库,然后......瞧 - 有新的会话条目。也许你应该更详细地描述你遇到的问题
    • 你有什么版本的 django?
    • Django 1.4.1,在 1.4.2 上我有同样的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    相关资源
    最近更新 更多