php - save_path - Zend / Session / SessionManager y cookie_lifetime
session save_path (1)
Estoy viendo un comportamiento extraño y frustrante con las sesiones ZF2 y los tiempos de espera.
Aquí está el código que uso para configurar la sesión:
$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);
Cuando ejecuto este código, se crea la cookie, pero la caducidad es el final de la sesión.
Si cambio el código de esta manera:
$sessionManager = new /Zend/Session/SessionManager();
$sessionManager->rememberMe(31536000);
$sessionManager->setConfig($sessionConfig);
$session = new /Zend/Session/Container(''MY_SESSION'', $sessionManager);
la cookie se crea y la expiración es dentro de un año.
Sin embargo, la sesión aún expira después de 30 minutos más o menos, aunque la cookie permanezca.
Lo que quiero es que tanto la cookie como la sesión persistan durante un año. ¿Cómo logro esto en ZF2?
Parece que el problema tiene que ver con el manejo de la opción gc_maxlifetime. En / Zend / Session / SaveHandler / MongoDB, este valor se toma de la configuración de PHP, a través de ini_get (''session.gc_maxlifetime'');
No veo ningún lugar en / Zend / Session / SessionManager donde ini_set () se está llamando.
La solución, creo, es hacer una de las siguientes cosas:
- Edite php.ini y establezca el valor globalmente
- Edite .htaccess y agregue php_value session.gc_maxlifetime
- Extienda / Zend / Session / SessionManager y agregue un nuevo método que llame a ini_set () si se proporciona la opción gc_maxlifetime.