Zend \ Session \ SessionManager и cookie_lifetime

Я вижу какое-то странное и неприятное поведение с сеансами ZF2 и таймаутами.

Вот код, который я использую для настройки сеанса:

$sessionConfig = new \Zend\Session\Config\StandardConfig(); $sessionConfig->setOptions(array( 'cache_expire' => 525949, 'cookie_domain' => 'mydomain.com', 'cookie_lifetime' => 31536000, 'cookie_path' => '/', 'cookie_secure' => TRUE, 'gc_maxlifetime' => 31536000, 'name' => 'mydomain', 'remember_me_seconds' => 31536000, 'use_cookies' => TRUE, )); $sessionManager = new \Zend\Session\SessionManager($sessionConfig); $sessionManager->rememberMe(31536000); $sessionManager->setSaveHandler(new \Zend\Session\SaveHandler\MongoDB($mongo, $options); $session = new \Zend\Session\Container('MY_SESSION', $sessionManager); 

Когда я выполняю этот код, cookie создается, но истекает конец сеанса.

Если я изменил код следующим образом:

  $sessionManager = new \Zend\Session\SessionManager(); $sessionManager->rememberMe(31536000); $sessionManager->setConfig($sessionConfig); $session = new \Zend\Session\Container('MY_SESSION', $sessionManager); 

cookie создается и истекает через год.

Тем не менее, сеанс по-прежнему истекает через 30 минут или около того, хотя cookie остается.

Я хочу, чтобы и cookie, и сессия сохранялись в течение года. Как это сделать в ZF2?

Похоже, проблема связана с обработкой опции gc_maxlifetime. В \ Zend \ Session \ SaveHandler \ MongoDB это значение берется из конфигурации PHP через ini_get ('session.gc_maxlifetime');

Я не вижу нигде в \ Zend \ Session \ SessionManager, где вызывается ini_set ().

Решение, я думаю, должно сделать одно из следующего:

  1. Измените php.ini и установите значение глобально
  2. Изменить .htaccess и добавить php_value session.gc_maxlifetime
  3. Extend \ Zend \ Session \ SessionManager и добавьте новый метод, который вызывает ini_set (), если предоставляется опция gc_maxlifetime.