Конфігурація TTL сесії

Дата оновлення перекладу 2022-11-25

Конфігурація TTL сесії

Symfony за замовчуванням використовуватиме налаштування PHP ini session.gc_maxlifetime в якості життєвого циклу сесії. Однак, якщо ви зберігаєте сесії у базі даних, ви також можете сконфігурувати власний TTL у конфігурації фреймворку або навіть у рантаймі.

Зміна налаштування ini неможлива після початку сесії, тому якщо ви хочете використати інший TTL залежно від того, який користувач виконав вхід у систему, вам дійсно потрібно зробити це під час рантайму, використовуючи метод зворотного виклику нижче.

Конфігурація TTL

Вам потрібно передати TTL у масиві опцій обробника сесії, який ви використовуєте:

1
2
3
4
5
6
7
# config/services.yaml
services:
    # ...
    Symfony\Component\HttpFoundation\Session\Storage\Handler\RedisSessionHandler:
        arguments:
            - '@Redis'
            - { 'ttl': 600 }

Динамічна конфігурація TTL у рантаймі

Якщо ви хочете мати різні TTL для різних користувачів або сесій за будь-яких причин, це також можливо, шляхом передачі зворотного виклику в якості значення TTL. Потім, зворотний виклик має повернути ціле число, яке буде використано як TTL.

Зворотний виклик буде викликаний прямо перед написанням сесії.

1
2
3
4
5
6
7
8
9
10
11
12
13
# config/services.yaml
services:
    # ...
    Symfony\Component\HttpFoundation\Session\Storage\Handler\RedisSessionHandler:
        arguments:
            - '@Redis'
            - { 'ttl': !closure '@my.ttl.handler' }
     
    my.ttl.handler:
        class: Some\InvokableClass # деякий клас з методом __invoke()
        arguments:
            # Впровадити ті залежності, які вам потрібні, щоб розвʼязати TTL для поточної сесії
            - '@security'