Correction d'un bug dans la fonction "actualiser_sessions"
Dans le fichier ecrire/inc/session.php, j'ai relevé un bug au niveau de la fonction "actualiser_sessions", dont voici le code ci-dessous:
function actualiser_sessions($auteur) { if (!intval($auteur['id_auteur'])) return; // memoriser l'auteur courant (celui qui modifie la fiche) $sauve = $GLOBALS['visiteur_session']; // .. mettre a jour les sessions de l'auteur cible foreach(preg_files(_DIR_SESSIONS, '/'.$id_auteur.'_.*\.php') as $session) { $GLOBALS['visiteur_session'] = array(); include $session; # $GLOBALS['visiteur_session'] est alors l'auteur cible $auteur = array_merge($GLOBALS['visiteur_session'], $auteur); ecrire_fichier_session($session, $auteur); } // restaurer l'auteur courant $GLOBALS['visiteur_session'] = $sauve; // si c'est le meme, rafraichir les valeurs if ($auteur['id_auteur'] == $sauve['id_auteur']) verifier_session(); }
J'ai créé un système de modification des informations personnelles pour les utilisateurs d'un site. Or, après modification et validation du formulaire (les traitements d'enregistrements sont réalisés via les méthodes natives de SPIP), je me suis rendu compte que les infos étaient bien modifiées en base de données, mais pas en session. Je suis remonté jusqu'à cette méthode, et j'ai découvert que le fameux "$id_auteur" utilisé dans le "preg_files" pour récupérer les fichiers sessions de l'auteur courant n'était pas défini. Deux solutions:
- soit remplacer "if (!intval(
auteur['id_auteur']))" par "if (!intval(
id_auteur = $auteur['id_auteur']))" - soit remplacer "foreach(preg_files(DIR_SESSIONS, '/'.$id_auteur.'..php') as $session) {" par "foreach(preg_files(DIR_SESSIONS, '/'.$auteur['id_auteur'].'..php') as $session) {"
Je ne sais pas si cela a une incidence sur beaucoup de sites, mais c'était très génant dans mon cas, et je pense qu'il peut en être de même pour d'autres utilisateurs utilisant de manière plus poussée le système de connexion et d'enregistrement.
J'ai dupliqué le bug car je l'avais mis en résolu, du coup personne n'a l'air de s'en être occupé.