web-dev-qa-db-fra.com

Comment lire resp. analyser les données de session Joomla lues dans la base de données?

Existe-t-il un moyen de lire et d’analyser les données de session Joomla dans PHP comme session_decode() et unserialize() ne fonctionnent pas sur ces valeurs)?

Dans mon composant, j'ai besoin de lire les données de toutes les sessions non invitées actives (colonne de données dans la table de la base de données #__session) et de vérifier l'existence de certaines variables.

2
Mario Neubauer

Dans ce champ, les données sont divisées en espaces de noms. L'espace de noms et ses données sont séparés par |. Par conséquent, si vous utilisez explode('|',$data), vous obtiendrez un tableau où élément impair est un tableau de données et chaque élément pair est un espace de nom. Voici un exemple pour décoder cette variable en espaces de noms:

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('data')->from('#__session');
$db->setQuery($query);
$raw_data = str_replace('\0\0\0', chr(0) . '*' . chr(0), (string)$db->loadObject()->data);
$raw_data = explode('|',$raw_data);

$data = array();
for( $idx = 1, $ic=count($raw_data); $idx<$ic; $idx+=2 ) {
    $data[$raw_data[$idx-1]] = unserialize($raw_data[$idx]);
}

La variable $data Contiendra des données de session divisées en éléments de tableau distincts, où clé de tableau est un espace de noms. L'espace de noms par défaut doit être le premier et son index doit être __default

2
Artur Stępień