Exemple #1
0
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();
}
Exemple #2
0
/**
 * 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;
    }
}
Exemple #3
0
/**
 * 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();
    }
}