function actualiser_sessions($auteur) { if (!$id_auteur=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 (isset($sauve['id_auteur']) and $auteur['id_auteur'] == $sauve['id_auteur']) verifier_session(); }
/** * Mettre a jour les sessions existantes pour un auteur * Quand on modifie une fiche auteur on appelle cette fonction qui va * mettre a jour les fichiers de session de l'auteur en question. * (auteurs identifies seulement) * * Ne concerne que les sessions des auteurs loges (id_auteur connu) * * @param array $auteur * @param array $supprimer_cles * Liste des clés à supprimer des tableaux de sessions */ function actualiser_sessions($auteur, $supprimer_cles = array()) { $id_auteur = isset($auteur['id_auteur']) ? intval($auteur['id_auteur']) : 0; $id_auteur_courant = isset($GLOBALS['visiteur_session']['id_auteur']) ? intval($GLOBALS['visiteur_session']['id_auteur']) : 0; // si l'auteur est celui de la session courante, verifier/creer la session si besoin $fichier_session_courante = ""; if ($id_auteur == $id_auteur_courant) { ajouter_session($auteur); if ($id_auteur) { $fichier_session_courante = fichier_session('alea_ephemere'); } } // si session anonyme on ne fait rien d'autre ici : les sessions anonymes sont non partagees if (!$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 // attention au $ final pour ne pas risquer d'embarquer un .php.jeton temporaire // cree par une ecriture concurente d'une session (fichier atomique temporaire) $sessions = preg_files(_DIR_SESSIONS, '/' . $id_auteur . '_.*\\.php$'); // 1ere passe : lire et fusionner les sessions foreach ($sessions as $session) { $GLOBALS['visiteur_session'] = array(); // a pu etre supprime entre le preg initial et le moment ou l'on arrive la (concurrence) if ($session !== $fichier_session_courante and @file_exists($session)) { include $session; # $GLOBALS['visiteur_session'] est alors l'auteur cible $auteur = array_merge($GLOBALS['visiteur_session'], $auteur); } } // supprimer les eventuelles cles dont on ne veut plus foreach ($supprimer_cles as $cle) { unset($auteur[$cle]); } $auteur_session = preparer_ecriture_session($auteur); // seconde passe : ecrire les sessions qui ne sont pas a jour foreach ($sessions as $session) { $GLOBALS['visiteur_session'] = array(); // a pu etre supprime entre le preg initial et le moment ou l'on arrive la (concurrence) if (@file_exists($session)) { include $session; # $GLOBALS['visiteur_session'] est alors l'auteur cible // est-ce que cette session est a mettre a jour ? if ($auteur_session != $GLOBALS['visiteur_session']) { ecrire_fichier_session($session, $auteur); } } } if ($id_auteur == $id_auteur_courant) { $GLOBALS['visiteur_session'] = $auteur; $GLOBALS['auteur_session'] =& $GLOBALS['visiteur_session']; } else { // restaurer l'auteur courant $GLOBALS['visiteur_session'] = $sauve; } }
/** * Mettre a jour les sessions existantes pour un auteur * Quand on modifie une fiche auteur on appelle cette fonction qui va * mettre a jour les fichiers de session de l'auteur en question. * (auteurs identifies seulement) * * http://doc.spip.org/@actualiser_sessions * * @param array $auteur */ function actualiser_sessions($auteur) { if (!($id_auteur = 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 // attention au $ final pour ne pas risquer d'embarquer un .php.jeton temporaire // cree par une ecriture concurente d'une session (fichier atomique temporaire) $sessions = preg_files(_DIR_SESSIONS, '/' . $id_auteur . '_.*\\.php$'); foreach ($sessions as $session) { $GLOBALS['visiteur_session'] = array(); // a pu etre supprime entre le preg initial et le moment ou l'on arrive la (concurrence) if (@file_exists($session)) { 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 (isset($sauve['id_auteur']) and $auteur['id_auteur'] == $sauve['id_auteur']) { verifier_session(); } }