2011-12-15 16 views
6

Configuré una versión de prueba de un sitio web con código PHP que usa sesiones para manejar los inicios de sesión de los usuarios. En el servidor de prueba, la sesión caducaría al cerrar el navegador, ya que al copiar todo al servidor en vivo "limpio", la sesión permanecerá en su lugar al cerrar el navegador y el usuario aún inicia sesión incluso el día siguiente al reinicio completo del sistema.¿Por qué la sesión no caduca en el navegador se cierra cuando session.cookie_lifetime = 0?

En php.ini

; Lifetime in seconds of cookie or, if 0, until browser is restarted. 
; http://www.php.net/manual/en/session.configuration.php#ini.session.cookie-lifetime 
session.cookie_lifetime = 0

lo que implica que debería expirar el reinicio del navegador.

pensé que tal vez estaba siendo anulado en alguna parte, pero si print_r los session_get_cookie_params en PHP me da

Array 
(
    [lifetime] => 0 
    [path] =>/
    [domain] => 
    [secure] => 
    [httponly] => 
) 

¿Hay algo que me falta?

+0

¿Usted intentó que en otros navegadores? ¿Qué navegador estás usando? El valor de vencimiento puede enviarse al navegador, pero el navegador puede rechazar la eliminación de cookies al cerrar. Comprueba también la configuración de tu navegador y prueba en otros navegadores. – mauris

+0

Es lo mismo en Firefox y IE. Sin duda, si se trataba de un problema del navegador, lo mismo sucedería en el servidor de prueba que en el directo. El comportamiento no ocurre en otros sitios web (que lo he notado de todos modos) –

+0

Además, ha sido notado por el cliente para quien el sitio web fue creado y ¡él no quiere que suceda! –

Respuesta

3

Iba a agregar esto como un comentario sobre la excelente respuesta de Alexander, pero va a ser un poco detallado.

Cuanto tiempo se retiene la cookie en el navegador y durante cuánto tiempo los datos de la sesión son retenidos por el servidor en ausencia de una solicitud son 2 cosas separadas e independientes. No hay forma de evitar esto debido a la naturaleza sin estado de HTTP, aunque hay algunas cosas que puede hacer para mitigar lo que percibe como una falla de seguridad.

Para el navegador para acceder a la misma sesión después de haber sido cerrado y algo de retraso se requiere que tanto la cookie de sesión será retenido por el navegador (que Alexander ya se ha explicado) y para el servidor que ha conservado los datos de sesión .

El comportamiento que describes puede ser mucho más pronunciado en sistemas que manejan un bajo volumen de solicitudes y donde el manejador de sesión no verifica el TTL de los datos de sesión (no estoy seguro si los controladores predeterminados lo hacen, o si solo asuma que cualquier dato de sesión no borrado se considera actual).

No ha proporcionado ningún detalle sobre cómo se configuran los 2 servidores, especialmente la session.gc_maxlifetime.

Si el session.gc_maxlifetime ha expirado entre las peticiones, pero los datos de sesión sigue siendo accesible Esto implica que el gestor de sesiones meramente considera que este es el momento en que se considera elegible para la recolección de basura (que, semánticamente, es lo que el período de sesiones la opción de configuración es para). Sin embargo, hay un caso fuerte para tratar este valor como un TTL. Para solucionar esto, puede forzar a la recolección de elementos no utilizados a ejecutarse con mayor frecuencia y eliminar los datos de la sesión, o utilizar un controlador de sesión que ignora los datos de la sesión anteriores al límite especificado.

El que vea una diferencia entre los 2 sistemas puede deberse a valores diferentes para session.gc_maxlifetime o diferencias en la frecuencia de recolección de elementos no utilizados o incluso diferentes manejadores de sesión.

+0

Gracias. Muy informativo. session.gc_maxlifetime = 1440 –

4

El problema aquí es que un Firefox tiene una característica llamada "Restaurar la última sesión". Si alguien usa las pestañas de salvar al cerrar, entonces es lo mismo. Cuando el navegador restaura la última sesión, todas las cookies de sesión también se restaurarán :)

Para que su cookie de sesión pueda vivir para siempre. Puede leer más en Firefox session cookies

+0

Eso no explica por qué solo muestra este comportamiento en el servidor activo y no en el servidor de prueba, o por qué IE muestra el mismo comportamiento. Además, al cerrar FF, no estoy guardando pestañas, ni estoy restableciendo la última sesión. –

+0

De todos modos, es útil saberlo, gracias. Parece un poco un riesgo de seguridad en FF tbh. –

+0

Una mejor solución para la autenticación es utilizar cookies con una vida útil fija y "tocarlos" en cada solicitud. – lisachenko

8

Si está utilizando Google Chrome

si ajusta "continuar donde lo dejé", cromo restaurará los datos de navegación y las cookies de sesión.

incluso sesión de Facebook (sin "recordarme") se retiene la sesión.

para obtener más información

google chrome setting

Cuestiones relacionadas