2010-04-27 12 views
6

Um, esto puede sonar un poco raro. Estábamos teniendo algunos problemas con un navegador específico bajo una condición muy específica, y finalmente redujimos el problema al hecho de que no estábamos destruyendo correctamente las sesiones anteriores después de hacer session_regenerate_id(). Creo que he resuelto este problema haciendo session_regenerate_id (true) ahora, pero ¿cómo se verifica que las sesiones anteriores ya no existen? Alguien sugirió cURL, pero no puedo encontrar mi camino en torno a sus documentos. Tristemente (?) El jefe no acepta "simplemente funciona" como respuesta, así que realmente agradecería cualquier consejo.cómo verificar que una sesión anterior realmente se destruyó?

+0

Parece que la gente de SO tiende a responder preguntas que no entienden. ¿A qué te refieres con "sesión" exactamente? ¿Qué materias importa? ¿Y por qué estás tan seguro de que realmente redujo el problema? –

Respuesta

4

Por defecto session_regenerate_id(); única sustituirá a la sesión actual por uno nuevo. Por lo tanto, el archivo de sesión anterior no necesita ser borrado. Pero al hacer un session_regenerate_id(true); se eliminará el archivo de sesión anterior. (http://php.net/session_regenerate_id)

para comprobar si se elimina sesión antigua se puede hacer algo como esto

<?php 
$file=ini_get('session.save_path')."/sess_".session_id(); 
$gotDeleted = file_exists($file); 
?> 

También se puede hacer un session_destroy(). Si debe conservar algunas variables, puede probar unset() en valores específicos de $_SESSION.

+0

Sí, es cierto en la mayoría de los casos, pero en algunos casos especiales no va a funcionar. Especialmente cuando usa session_name ("WHATEVERNAMESESSID") en su código. No hay forma de que puedas eliminarlo. La sesión permanece allí para siempre hasta que el navegador (firefox) esté cerca. ¡Muy extraño! – B4NZ41

1

Para asegurarse de que los datos de la sesión hayan desaparecido, debe ver la sesión que guarda el servidor. De forma predeterminada, almacena sesiones como archivos de disco simple (esta es la razón por la que una sesión sobrevive a un reinicio de apache, por ejemplo). Es posible que desee revisarlos y verificar que el que corresponde a la sesión que estaba observando se haya eliminado efectivamente.

O, si esta es una información tan crítica, es posible que desee construir su propio backend de sesión (que no es difícil en absoluto) para tener aún más control y más opciones de depuración (destruiría manualmente los datos y podría agregar instrucciones de registro para demostrar que los datos se han eliminado).

Ver aquí: http://php.net/manual/en/function.session-set-save-handler.php

O aquí: http://devzone.zend.com/article/141

Cuestiones relacionadas