Symfony 3.4 время сеанса

В моем приложении Symfony 3.4 пользователь автоматически выходит из системы через определенный период времени. Я хочу изменить это поведение и сделать так, чтобы мое приложение никогда не выходило из системы автоматически. Он должен выходить из сеанса только тогда, когда пользователь щелкает ссылку выхода.

Я прочитал документацию и попытался установить cookie_lifetime, но у меня это не работает. Если кто-то работал в этой области, пожалуйста, подскажите, как действовать дальше.

Обновления:

Я использую эту страницу документации http://symfony.com/doc/master/components/http_foundation/session_configuration.html#session-lifetime

Я использую проект на основе Symfony 3.4 flex.

Я настраиваю конфигурации в config / packages / framework.yml. Конфигурации следующие:

framework:
    session:
        handler_id: ~
        cookie_lifetime: 31536000
        gc_maxlifetime: 31536000

Можете ли вы привести пример кода того, что вы пробовали до сих пор? Особенно как вы установили cookie_lifetime? Вы использовали эту страницу документации? symfony.com/doc/current/security/remember_me.html

Musterknabe 16.03.2018 16:06

Я добавил больше информации

N. Karthic Kannan 16.03.2018 16:12

Вы пробовали ссылку, которую я предоставил? Похоже, вам также нужно настроить sth. в firewall.

Musterknabe 16.03.2018 16:48

@Musterknabe Нет, помни, я не нужен в этом случае. Я ответил на свой вопрос ниже.

N. Karthic Kannan 21.03.2018 17:00

Ах, извините, тогда я вас неправильно понял. Вам не нужна была функция remember_me, вы просто хотели, чтобы пользователь вообще не выходил из системы, верно?

Musterknabe 22.03.2018 13:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
5
5
4 737
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

После долгой отладки я обнаружил, что следующая конфигурация указывает Symfony использовать обработчик сохранения PHP по умолчанию и путь к файлу сеанса по умолчанию.

framework:
    session:
        handler_id: ~

Следовательно, файлы сессий Symfony хранятся в каталоге /var/lib/php/sessions. В операционных системах на основе Debian задание cron удаляет файлы сеанса каждые полчаса. Это задание cron определяет активные сеансы на основе PIDs, связанного с apache2, и обновляет время последнего доступа и время последнего изменения только этих файлов активных сеансов.

Затем то же задание cron удаляет файлы сеанса, которые имеют время последней модификации перед gc_maxlifetime, т.е. неактивные сеансы. Основная проблема заключается в том, что gc_maxlifetime определяется только на основе файлов php.ini, но без учета файлов .yaml от Symfony. Следовательно, конфигурации в файлах Symfony .yaml игнорируются и используется gc_maxlifetime PHP.

Это приводит к тому, что файлы сеанса удаляются через 20-30 минут. Чтобы решить эту проблему, я обновил конфигурации .yaml следующим образом:

framework:
    session:
        handler_id: session.handler.native_file
        save_path: '%kernel.project_dir%/var/sessions/%kernel.environment%'
        cookie_lifetime: 31536000
        gc_maxlifetime: 31536000

Теперь файлы сеанса не хранятся в каталоге /var/lib/php/sessions по умолчанию, и, следовательно, задание cron не удаляет файлы сеанса. Теперь Symfony берет на себя эту работу по обработке сессий, и теперь она работает отлично.

Это решение для Symfony 4.

session:
        #handler_id: ~
        handler_id: session.handler.native_file
        save_path: '%kernel.project_dir%/var/sessions/%kernel.environment%'        
        cookie_lifetime: 1800 // was "lifetime" but deprecated

Другие вопросы по теме