Избегание запуска сессий для анонимных пользователей

Сессии запускаются автоматически каждый раз, когда вы читаете, пишете или даже проверяете наличие данных в сессии. это означает, что если вам нужно избежать создания cookie сессии для некоторых пользователей, то это может быть сложно: вам нужно полностью избежать допуска к сессии.

Например, распространённая проблема в этой ситуации включает в себя поиск флеш- сообщений. который хранятся в сессии. Следующий код будет гарантировать, что сессия будет запускаться всегда:

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

Даже если пользователь не выполнил вход, и даже если вы не создавали никаких флеш- сообщений, простой вызов метода get() (или даже has()) в flashBag запустит сессию. Это может навредить производительности вашего приложения, так как все пользователи буду получать cookie сессии. Чтобы избежать такого поведения, добавьте проверку перед тем, как получать доступ к флеш-сообщениям:

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

New in version 3.3: Функция Twig app.flashes() была представлена в Symfony 3.3. Ранее вам нужно было использовать app.session.flashBag().

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.