2011-05-13 10 views
5

¿No es posible obtener la lista de todos session_id en PHP SESSIONS?obtener lista de todos PHP session_id

Nota: Necesito mantener algún archivo en el servidor. Un archivo equivale a una sesión Y necesito determinar el comportamiento de los archivos antiguos si SESSION expira.


Gracias a todos por cualquier consejo.

+3

No creo que exista - tendrías que hacer un seguimiento de ellos manualmente cuando se crean. ¿Para qué necesitas esto? –

+0

Estoy creando una aplicación web mash-up y necesito insertar una imagen en la sesión desde Flickr en 'canvas'. Pero 'canvas' no puede usar la imagen del servidor remoto. Así que los guardo localmente con PHP y luego los uso. Pero, por supuesto, necesito limpiar la carpeta temporal, si el archivo de la sesión caducada no es necesario. Entonces, si se crea una nueva sesión, verifico si el temporal contiene solo imágenes con sesiones activas de ID. – LukasSvihel

Respuesta

1

tendría que hacer esto en un proyecto antiguo.

puse el nombre de los archivos con el session_id (algo como esto: sessionid_some_file.tmp):

_TMP_PATH_: ruta donde los archivos para comprobar lo son.

foreach(new DirectoryIterator(_TMP_PATH_) as $file) 
{ 
    if(preg_match('/(.*)_(.*)_(.*)\.tmp/', $file->getFilename(), $data)) 
    { 
     session_write_close(); 
     $session_id = $data[1]; 
     session_id($session_id); 
     session_start(); 
     if(empty($_SESSION)) 
     { 
      unlink(_TMP_PATH_ . $file->getFilename()); 
     } 
    } 
} 
session_write_close(); 

foreach files obtengo el session_id, ábralo y pruebe si hay algo adentro. (Escribí algo después de cada sesión abierta)

Pero tenga cuidado, esta pieza de código nunca ha estado en un entorno de producción.

+0

Gracias - modificación de este trabajo para mí. – LukasSvihel

2

Lo mejor que puede hacer para obtener una lista de todos los ID de sesión existentes es:

preg_grep("/^sess_/", scandir(ini_get("session.save_path"))) 

Pero eso no le dirá qué archivos siguen siendo válidos. Y realmente no entiendo la segunda parte de tu pregunta. Pero es posible deserializarlos manualmente para buscar atributos.

+0

Este código no funciona. ¿Lo hago eco, verdad? 'echo $ temp = preg_grep ("/^ sess_/", scandir (ini_get (" session.save_path "))); echo $ temp [0]; ' – LukasSvihel

+1

' print_r() 'funciona mejor en matrices. – mario

+0

Gracias. Ahora está imprimiendo información. – LukasSvihel

3

Como otros han respondido, las sesiones se almacenan en la ruta definida por session.save_path en php.ini y puede repetir este directorio para recuperar una lista de cada sesión.

Un enfoque alternativo sería cambiar el almacenamiento de la sesión y moverlo a una base de datos usando session_set_save_handler(). Puede almacenar todas sus sesiones en una base de datos y hacer con ella lo que desee.

+0

Esa buena idea, pero no puedo acceder para cambiar 'php.ini' y' session.save_path' está configurado de forma predeterminada en '/ dev/shm' ruta no existente :( – LukasSvihel

Cuestiones relacionadas