ZF2: Почему мои сеансы завершаются?

Мое приложение ZF2 выходит из системы после короткого периода бездействия - скажем, 60 минут или около того - и я не могу понять, почему.

У меня есть объект 'auth', который представляет собой синглтон, который составляет экземпляр Zend\Session\Container. Его конструктор создает контейнер со следующей строкой:

$this->session = new Container('Auth');

Объект auth имеет метод login(), который сохраняет текущего пользователя со следующей строкой:

$this->getSession()->userId = $user->id;

Объект auth также имеет метод isLoggedIn(), который проверяет статус следующим образом:

if ($this->getSession()->userId) {
     return true;
}
return false;

Это все довольно просто. Тем не менее, время от времени, когда бутстрап проверяет, вошли ли мы в систему, он возвращает false. Почему?

Вот распечатка конфига из менеджера сессий:

'cookie_domain' => '',
'cookie_httponly' => false,
'cookie_lifetime' => 604800,
'cookie_path' => '/',
'cookie_secure' => '',
'name' => 'MyApplication',
'remember_me_seconds' => 1209600,
'save_path' => '/var/lib/php5',
'use_cookies' => true,

Как видите, remember_me_seconds и cookie_lifetime установлены на 2 недели и 7 дней соответственно. Есть ли какие-то другие настройки, на которые я должен смотреть?

Я где-то читал, что обработчик сохранения по умолчанию, «файл», не поддерживает параллелизм. Мой бутстрап также открывает session container для пространства имен auth с new Container('Auth'). Может ли это конфликтовать с контейнером в синглтоне аутентификации? Я сомневаюсь в этом, поскольку тогда проблема, скорее всего, возникнет в периоды высокой активности (а не после периода бездействия). Кроме того, я ожидал увидеть исключение.

Горе мне.

РЕДАКТИРОВАТЬ: Также стоит отметить, что идентификатор сеанса не меняется при выходе из системы или при повторном входе в систему.


person DatsunBing    schedule 09.04.2015    source источник


Ответы (1)


Есть много моментов, по которым сессия может стать недействительной.

всегда проверяйте следующие пункты:

  • время жизни cookie сеанса (должно стать недействительным только при закрытии браузера)
  • само время жизни сеанса
  • Ключ cache_expire в zf2 (должен быть выше, чем время жизни сеанса)

Попробуйте добавить это

    //NEW SECTION
    'cache_expire'         => 60 * 26, <-- this may help
    'gc_maxlifetime'       => 60 * 60 * 24, <-- or this
person ThaDafinser    schedule 17.04.2015