use_trans_sid save_path ini_set gc_probability cookie_lifetime cookie_httponly auto_start php zend-framework2 session-timeout

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:

  1. Edite php.ini y establezca el valor globalmente
  2. Edite .htaccess y agregue php_value session.gc_maxlifetime
  3. Extienda / Zend / Session / SessionManager y agregue un nuevo método que llame a ini_set () si se proporciona la opción gc_maxlifetime.