避免匿名用户启动Session

3.4 版本
维护中的版本

每当你读、写、甚至检查数据是否存在于session时,session都会自动启动。这意味着,如果你要避免为一些用户创建session cookie会很困难:你必须完全避免访问session。

例如,在这种情况下的一个常见的问题,是检查flash消息,它被存储在session中。下面的代码将确定令session 始终 开启:

1
2
3
4
5
{% for flashMessage in app.session.flashBag.get('notice') %}
    <div class="flash-notice">
        {{ flashMessage }}
    </div>
{% endfor %}

即便用户没有登录,即便你没有创建任何的flash消息,只是调用flashBagget()(或者has())方法,则也会开启session。这会影响程序性能,因为所有的用户都将收到一个session cookie。为了避免这一行为,在尝试访问flash消息之前添加一个检查:

1
2
3
4
5
6
7
{% if app.request.hasPreviousSession %}
    {% for flashMessage in app.session.flashBag.get('notice') %}
        <div class="flash-notice">
            {{ flashMessage }}
        </div>
    {% endfor %}
{% endif %}

本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。

登录symfonychina 发表评论或留下问题(我们会尽量回复)