2009-05-27 19 views
6

Estoy perdido aquí. Tengo un grupo específico de usuarios arriba cuyas sesiones parecen expirar completamente al azar. No es solo cuando abandonan el sitio por un tiempo, puede caducar mientras navegan. Para mí y la mayoría de nuestros usuarios, todo funciona bien. No es un problema del navegador, tenemos personas en FF y todas las versiones de IE que funcionan correctamente y personas en FF e IE que no funcionan.Sesiones PHP que caducan inesperadamente

Mi gc_maxlifetime está en 43200 y la recolección de basura es una locura baja 1/1000 (no es lo que debería importar). ¿Es posible que haya algo más ejecutándose en el servidor que borre aleatoriamente algunas de nuestras sesiones? ¿Qué debo verificar? Eso aún no explicaría por qué solo este grupo específico parece verse afectado.

que tienen algunas opciones de configuración de sesión que son diferentes de las predeterminadas:

session.gc_maxlifetime = 43200 
session.gc_divisor = 1000 
session.save_path = /var/lib/php/session 
session.use_only_cookies = Off 
session.bug_compat_42 = Off 

Los tres primeros no estoy preocupado, pero los dos últimos podrían ser la causa de este comportamiento? En realidad, nunca envío cookies a través de la URL, por lo que no tengo una buena razón para desactivar use_only_cookies. No tengo garantías de que los inadaptados que hicieron esta aplicación antes de llegar aquí no explotaron la cosa bug_compat_42 para establecer variables de sesión, pero de nuevo, esperaría que un problema con eso sea menos aleatorio.

Editar:

En una posterior investigación, he encontrado que la sesión no está siendo destruido en absoluto, pero el usuario final tendrá un nuevo identificador de sesión. La sesión anterior todavía existe intacta en el servidor, pero una nueva se inicia aleatoriamente mientras navegan.

+0

Una de dos cosas está sucediendo: se está eliminando el archivo de sesión en el servidor, o la cookie de sesión está expirando. Trataría de aislar un caso de uno u otro, y luego trabajar desde allí. –

+0

He determinado que no se está eliminando la sesión. ¿Cómo puedo verificar si la cookie está caducando? –

Respuesta

5

El problema aquí es que su navegador estaba configurando la cookie de sesión para que caduque prematuramente. He resuelto el problema con este truco sucio y sucio que nunca deberías usar.No estoy orgulloso de ello, pero si esto brilla alguna luz sobre todo lo siento libres de dejarme en:

if (!headers_sent()) { 
    if ($_COOKIE["PHPSESSID"] != "") { 
     setcookie("PHPSESSID", $_COOKIE["PHPSESSID"], time()+43200, "/", ".mydomain.com"); 
    } 
} 
+0

¿Sabe qué navegadores se vieron afectados por este problema, estamos viendo algo similar con algunos usuarios que usan ie10 solamente ... – Cliffordlife

+0

Código muy similar es la nota más popular para session_set_cookie_params en el sitio php. Parece que tienes que hacer algo para que las cosas funcionen correctamente. http://www.php.net/manual/en/function.session-set-cookie-params.php#100657 –

+0

Tuve el mismo problema que tú, pero en el alojamiento pago. No pude descifrar qué podría causar la espiración prematura, así que lo hice de forma similar a como lo hizo. Gracias. – HelpNeeder

1

¿Puede proporcionarnos un poco más de información sobre su configuración?

Lo primero que pensé fue que hay algo que limpia al azar el directorio de archivos temporales. Si está utilizando una configuración LAMP estándar, PHP almacenará los archivos de datos de la sesión en/tmp. Si un proceso de limpieza los borra de allí, perdería sus sesiones.

Editar: Estoy reconsiderando esto ahora. Si solo un grupo específico de usuarios se ve afectado, eso lo hace mucho menos probable.

¿Qué tal la configuración de cookies? Me aseguraría de que estas personas no utilicen algo así como un proxy dinámico, y que sus cookies estén siendo configuradas para el dominio raíz de su sitio. ¿Es posible que tengan algún software de limpieza de privacidad como CCleaner configurado como una tarea programada que podría eliminar sus cookies?

Me gustaría subir allí en una de sus computadoras y lanzar Firebug en una de las máquinas Firefox y examinar las solicitudes HTTP para ver si las cookies se están enviando correctamente.

+0

Como dije, he considerado esta opción, pero no creo que esto produzca el comportamiento que estoy obteniendo. Si algo estuviera limpiando las sesiones, esperaría que todos se desconectaran simultáneamente. En cambio, solo he desconectado a un pequeño grupo de personas al azar. ¿Qué otra información sobre la configuración sería útil? –

+0

Puede verificar todas las configuraciones de su sesión. Hay una lista en http://ca2.php.net/manual/en/session.configuration.php. – zombat

1

me habría instalar algún sniffer HTTP como httpwatch (pagado, pero vale la pena cada centavo) o fiddler (gratis) en esas máquinas y ver lo que está pasando con las cookies de sesión (creo que es PHPSESSID, pero no estoy seguro). Si la cookie se elimina o cambia en el medio de la sesión debido a proxies, configuración de apache extraña o algo así, esta sería la mejor manera de detectarlo.

1

Sé que es tarde. Pero solo para algunas personas que también tienen el mismo problema.

[Si cifrar y descifrar sus datos]

me he encontrado con este problema y me tomó un tiempo para averiguar cuál es el problema. Sigue creando una nueva ID de sesión para el mismo usuario. Resulta que los datos de cifrado y descifrado no son lo mismo. Los datos de descifrado regresan con algunos espacios en blanco adicionales. Intente verificar el valor de sus datos cuando los envíe y los devuelva desde la base de datos o el almacenamiento que esté utilizando.

0

En mi proyecto se usa una biblioteca para asegurar la sesión. En algún momento observé que mi sesión se destruye de repente.

https://github.com/ezimuel/PHP-Secure-Session/blob/master/SecureSession.php

primero quiero tonelada sabe cuál es el propósito de esta biblioteca, que podamos para esta configuración de php.ini también.

CLAVE _... una nueva creación de lo que es el uso de esta CLAVE.

Cuando uso print_r interior abierto(), me sale por debajo resultado de la muestra

Hqx_SecureSession Object 
(
    [_debug:Hqx_SecureSession:private] => 
    [_key:protected] => 5ò™6žÝ°rIÐß'k Êii07ÀtCzª[email protected]ü¸"‡ÄCžA¼ÿ£g{IP 
    [_path:protected] => c:\hqp\xampp_1.7.4\tmp\ 
    [_name:protected] => PHPSESSID 
    [_ivSize:protected] => 16 
    [_keyName:protected] => KEY_PHPSESSID 
    [_cookieParams:protected] => Array 
     (
      [lifetime] => 7200 
      [path] =>/
      [domain] => dev.autoquotes.insurance.com 
      [secure] => 
      [httponly] => 1 
     ) 

    [_sessionId:protected] => 
    [_logger:Hqx_SecureSession:private] => 
) 
htq827r4rjh9ob05nhlqb8vmd5ai52djb0bd0l42vk9un26df541c:\hqp\xampp_1.7.4\tmp