Я вижу какое-то странное и неприятное поведение с сеансами 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 ().
Решение, я думаю, должно сделать одно из следующего: