离线下载
PDF版 ePub版

极客学院团队出品 · 更新于 2018-11-28 11:00:43

避免匿名用户开始 Session 会话

会话(Sessions)会在当您读、写,甚至仅仅是检查会话中的数据是否存在的时候自动启动。这意味着如果您需要避免为某些用户创建会话 cookie 是很难的:您必须完全避免访问会话。

例如,在这种情况下的一个常见的问题是检查存储在会话中的 flash 消息。以下代码将保证会话始终是开始的(started)。

{% for flashMessage in app.session.flashbag.get('notice') %}
    <div class="flash-notice">
        {{ flashMessage }}
    </div>
{% endfor %}

即使用户没有登录,即使您没有创建任何 flash 信息,只要调用 flashbagget()(或是 has())方法就可以启动一个会话。这可能会损伤您的应用程序性能,因为所有的用户都会收到一个会话 cookie。为了避免这一行为,在尝试访问 flash 消息之前添加一个 check 。

{% if app.request.hasPreviousSession %}
    {% for flashMessage in app.session.flashbag.get('notice') %}
        <div class="flash-notice">
            {{ flashMessage }}
        </div>
    {% endfor %}
{% endif %}