cakephp authentication session-timeout

cakephp session timeout



Tiempo de espera de sesiĆ³n de CakePHP solo en inactividad (5)

Después de encontrarme con el mismo problema, descubrí que esto fue causado por el valor de Session.cookieTimeout. Aunque la sesión de php todavía era válida, la fecha de caducidad de la cookie de sesión no se actualiza.

Esta es ahora mi configuración de sesión

Configure::write(''Session'', array( ''defaults'' => ''php'', ''timeout'' => 30, // The session will timeout after 30 minutes of inactivity ''cookieTimeout'' => 1440, // The session cookie will live for at most 24 hours, this does not effect session timeouts ''checkAgent'' => false, ''autoRegenerate'' => true, // causes the session expiration time to reset on each page load ));

Entonces, el quid de esta pregunta es cómo evitar que CakePHP desauthentique una sesión SOLAMENTE después de un período de inactividad.

Entonces, si el usuario no hace nada, entonces espero que CakePHP los cierre después de un período de 30 minutos. Sin embargo, si el usuario elige visitar una página en el minuto 28 de inactividad, entonces CakePHP debe ''reiniciar'' su contador de tiempo de espera.

Esto actualmente no está sucediendo. Independientemente de la actividad, CakePHP agota el tiempo después de la hora especificada en mi configuración central (app / Config / core.php).

Aquí está mi código de configuración:

Configure::write(''Session'', array( ''defaults'' => ''cake'', ''timeout'' => ''30'' ));

¿Algunas ideas?


Mientras que el valor de timeout restablece en cada vista de página y, por lo tanto, proporciona el "tiempo de espera de inactividad" que necesita, la fecha de caducidad de la cookie de sesión del navegador permanece constante.

Entonces, mientras la sesión de Cake fuera internamente (internamente = interna a Cake) aún viva si actualiza en el minuto 28 + 35 minutos, el navegador termina borrando la cookie de sesión después del minuto 30.

Puede restablecer la fecha de caducidad de la cookie de sesión a través de $this->Session->renew() . O configure autoRegenerate = true y requestCountdown = 1 y Cake renovará en cada página vista.

(Pero es una tontería que tengas que regenerar la sesión en cada vista de página. Como es, sin renew() , el valor de timeout nunca entrará en juego porque la cookie siempre caducará en una fecha fija sin importar cuánto actividad. Esto parece un error, pero no he buscado una solución alternativa).


Tuve el mismo problema y lo solucioné usando la opción autoRegenerate :

Configure::write( ''Session'', array( ''defaults'' => ''cake'', ''timeout'' => ''30'', ''autoRegenerate'' => true ) );

También podría usar $this->Session->renew(); en tu clase AppController.php , pero la solución anterior es mi favorita.


la respuesta de Rob Forrest es la correcta

Configure::write(''Session'', array( ''defaults'' => ''php'', ''timeout'' => 30, // The session will timeout after 30 minutes of inactivity ''cookieTimeout'' => 1440 ));

cookieTimeout debe ser mayor que el tiempo de espera si desea que la sesión expire en inactividad solo luego debe configurar cookieTimeout para un número muy grande (por ejemplo, 60 * 24 * 10 (10 días))


Configure::write(''Session'', array( ''defaults'' => ''cake'', ''timeout'' => 1440, // The session will timeout after 30 minutes of inactivity ''cookieTimeout'' => 1440, // The session cookie will live for at most 24 hours, this does not effect session timeouts ''checkAgent'' => false, ''autoRegenerate'' => true, // causes the session expiration time to reset on each page load ));

Esto funciona, aunque la sesión termina después de algunas horas, es mejor que terminar en minutos.