Una vez que ya sabemos dónde están los ficheros de sesión tal y como se ha visto en las entregas anteriores, podemos simular de forma idéntica a como hace PHP la carga de la información de la sesión en una matriz asociativa.
El primer paso es cargar los contenidos del fichero de la sesión.
$fname = session_save_path() . "/sess_" . $sid; $_session = unserializeSession( file_get_contents( $fname ) );
Y para ello, se usa la siguiente función. Si es que es demasiado fácil...
///////////////////////////////////////////////////////////////////////////////
/**
* unserializeSession - Unserialize para ficheros de sesión
*
* Convierte una cadena que se corresponde con los contenidos de un fichero de sesión en un array
* asociativo con las claves y valores de la sesión correspondiente.
*
* @access public
* @link http://www.php.net/manual/en/function.session-decode.php#101687
*
* @param string $data Cadena de texto del fichero de la sesión
* @return array Array asociativa con las claves y valores
*/
function unserializeSession( &$data )
{
if( strlen( $data) == 0)
{
return array();
}
// match all the session keys and offsets
preg_match_all('/(^|;|\})([a-zA-Z0-9_]+)\|/i', $data, $matchesarray, PREG_OFFSET_CAPTURE);
$returnArray = array();
$lastOffset = null;
$currentKey = '';
foreach ( $matchesarray[2] as $value )
{
$offset = $value[1];
if(!is_null( $lastOffset))
{
$valueText = substr($data, $lastOffset, $offset - $lastOffset );
$returnArray[$currentKey] = unserialize($valueText);
}
$currentKey = $value[0];
$lastOffset = $offset + strlen( $currentKey )+1;
}
$valueText = substr($data, $lastOffset );
$returnArray[$currentKey] = unserialize($valueText);
return $returnArray;
}
No hay comentarios:
Publicar un comentario