#session #symfony
#сессия #symfony
Вопрос:
У меня возникла проблема с сессионным компонентом symfony2. Я устанавливаю некоторые данные для сеанса через контейнер сеанса следующим образом:
$sess = $this->get( 'session' );
$sess->set( 'some_key', 'some_value' );
Но через некоторое время (около 15-20 минут) сеанс был потерян.
Могу ли я задать параметр времени жизни сеанса? Идеальным вариантом для меня было бы, если бы я мог установить определенное время периода работы сеанса…Кто-нибудь может, пожалуйста, помочь?
Ответ №1:
Вы можете установить время истечения сеанса в вашем конфигурационном файле в framework
разделе. Мой выглядит так:
config.yml
framework:
secret: %secret%
charset: UTF-8
error_handler: null
csrf_protection:
enabled: true
router: { resource: "%kernel.root_dir%/config/routing.yml" }
validation: { enabled: true, annotations: true }
templating: { engines: ['twig'] } #assets_version: SomeVersionScheme
session:
default_locale: %locale%
cookie_lifetime: 3600 // was "lifetime" but deprecated
auto_start: true
Вы можете изменить framework.session.lifetime
значение на любое, какое пожелаете, за считанные секунды (по умолчанию оно равно 3600, или 1 часу).
Ссылка здесь.
Комментарии:
1. Вы уверены, что framework.session. время жизни по умолчанию равно одному часу? Не могли бы вы указать мне, где вы видите, что это происходит в коде? В Symfony2
NativeSessionStorage
я вижу, что значения по умолчанию берутся из PHPsession_get_cookie_params()
, поэтому время жизни файла cookie сеанса PHP по умолчанию будет равно 0 (истекает при закрытии браузера). Кроме того, важно отметить, что даже если вы измените время работы cookie сеанса PHP, я думаю, вам также придется изменитьsession.gc_maxlifetime
настройки вашего PHP (поскольку по умолчанию это значение равно 1440 сек / 24 мин). Смотрите tinyurl.com/6txls7n2. Значение времени жизни сеанса Symfony2 по умолчанию равнялось 3600, когда я опубликовал этот ответ. Проверяя ссылку на конфигурацию , похоже, что с тех пор это значение было увеличено до 86400. Хотя, похоже, вы правы. Я вижу примечание, в котором говорится, что
session_get_cookie_params()
это переопределит переданные значения.3. Посмотрите еще раз, время жизни сеанса
0
по умолчанию. О, вау, опечатка. Это также 86 400! Я отправлю им патч, похоже, кто-то это испортил.4. Ха, так они и сделали. И проверьте конфигурацию DI для FrameworkBundle…
lifetime
не рекомендуется дляcookie_lifetime
… похоже, что документы здесь устарели.5. Да, устарел на master (может быть, это для Symfony2 версии 2.1?). Ага…
session_get_cookie_params()
переопределит переданные значения… еще одно изменение после Symfony2 v2.0, к которому мне, вероятно, придется приспособиться. 🙂
Ответ №2:
В Symfony 2.3 я думаю, что правильный ответ найден в app / config /config.yml:
framework:
session:
cookie_lifetime: 7200
gc_maxlifetime: 3600
GC (сборка мусора) будет сбрасываться при каждом запуске сервера, что означает, что если пользователь активен, у него будет 3600 для продолжения работы. cookie_lifetime
Заставит пользователя выйти из системы в пределах своего лимита. В этом примере у пользователя будет один час, чтобы быть неактивным, и он будет вынужден выйти через 2 часа.
Ответ №3:
Для комфортной работы вы можете установить в среде разработки a cookie_lifetime to 0
, это означает, что срок действия cookie истекает при закрытии браузера.
Файл: config_dev.php
framework:
session:
cookie_lifetime: 0