время жизни сеанса symfony2

#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 я вижу, что значения по умолчанию берутся из PHP session_get_cookie_params() , поэтому время жизни файла cookie сеанса PHP по умолчанию будет равно 0 (истекает при закрытии браузера). Кроме того, важно отметить, что даже если вы измените время работы cookie сеанса PHP, я думаю, вам также придется изменить session.gc_maxlifetime настройки вашего PHP (поскольку по умолчанию это значение равно 1440 сек / 24 мин). Смотрите tinyurl.com/6txls7n

2. Значение времени жизни сеанса 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