Мое приложение ZF2 выходит из системы после короткого периода бездействия — скажем, 60 минут или около того — и я не могу понять, почему.
У меня есть объект ‘auth’, который является синглтоном, который составляет экземпляр Zend\Session\Container
, Его конструктор создает контейнер со следующей строкой:
$this->session = new Container('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 дней соответственно. Есть ли какие-то другие настройки, на которые я должен смотреть?
Я где-то читал, что обработчик сохранения по умолчанию, ‘file’, не поддерживает параллелизм. Мой бутстрап также открывает session container
в пространство имен auth с new Container('Auth')
, Может ли это конфликтовать с контейнером в синглтоне аутентификации? Я сомневаюсь в этом, поскольку проблема, вероятно, возникнет в периоды высокой активности (а не после периода бездействия). Также я бы ожидал увидеть исключение.
Горе это я.
РЕДАКТИРОВАТЬ: Стоит также отметить, что идентификатор сеанса не изменяется при выходе или при повторном входе.
Есть много моментов, почему сессия может стать недействительной.
всегда проверяйте следующие пункты:
Попробуйте добавить это
//NEW SECTION
'cache_expire' => 60 * 26, <-- this may help
'gc_maxlifetime' => 60 * 60 * 24, <-- or this
Других решений пока нет …