Exemplo n.º 1
0
/**
 * 3 actions sur les sessions, selon le type de l'argument:
 * - numerique: efface toutes les sessions de l'auteur (retour quelconque)
 * - tableau: cree une session pour l'auteur decrit et retourne l'identifiant
 * - bool: predicat de validite de la session indiquee par le cookie
 *
 * http://code.spip.net/@inc_session_dist
 *
 * @param int|array|bool $auteur
 * @return bool|null|void
 */
function inc_session_dist($auteur = false)
{
    if (is_numeric($auteur)) {
        return supprimer_sessions($auteur, $auteur > 0);
    } else {
        if (is_array($auteur)) {
            return ajouter_session($auteur);
        } else {
            return verifier_session($auteur);
        }
    }
}
Exemplo n.º 2
0
/**
 * Ajoute une session pour l'auteur decrit par un tableau issu d'un SELECT-SQL
 *
 * http://doc.spip.org/@ajouter_session
 *
 * @param array $auteur
 * @return bool|string
 */
function ajouter_session($auteur)
{
    // Si le client a deja une session valide pour son id_auteur
    // on conserve le meme fichier
    // Attention un visiteur peut avoir une session et un id=0,
    // => ne pas melanger les sessions des differents visiteurs
    $id_auteur = intval($auteur['id_auteur']);
    // Si ce n'est pas un inscrit (les inscrits ont toujours des choses en session)
    // on va vérifier s'il y a vraiment des choses à écrire
    if (!$id_auteur) {
        // On supprime les données de base pour voir le contenu réel de la session
        $auteur_verif = $auteur;
        if (isset($auteur_verif['id_auteur'])) {
            unset($auteur_verif['id_auteur']);
        }
        if (isset($auteur_verif['hash_env'])) {
            unset($auteur_verif['hash_env']);
        }
        if (isset($auteur_verif['ip_change'])) {
            unset($auteur_verif['ip_change']);
        }
        if (isset($auteur_verif['date_session'])) {
            unset($auteur_verif['date_session']);
        }
        // Les variables vraiment nulle ne sont pas à prendre en compte non plus
        foreach ($auteur_verif as $variable => $valeur) {
            if ($valeur === null) {
                unset($auteur_verif[$variable]);
            }
        }
        // Si après ça la session est vide et qu'on a pas de cookie session, on arrete
        if (!$auteur_verif and !isset($_COOKIE['spip_session'])) {
            return false;
        }
    }
    if (!isset($_COOKIE['spip_session']) or !preg_match(',^' . $id_auteur . '_,', $_COOKIE['spip_session'])) {
        $_COOKIE['spip_session'] = $id_auteur . '_' . md5(uniqid(rand(), true));
    }
    $fichier_session = fichier_session('alea_ephemere');
    // Si la session est vide alors on supprime l'éventuel fichier et on arrête là
    if (!$id_auteur and !$auteur_verif) {
        if (@file_exists($fichier_session)) {
            spip_unlink($fichier_session);
        }
        // unset le COOKIE de session
        // car il est pris en compte dans spip_session() qui va croire a tort qu'on est pas un visiteur anonyme
        unset($_COOKIE['spip_session']);
        return false;
    }
    // Maintenant on sait qu'on a des choses à écrire
    // On s'assure d'avoir au moins ces valeurs
    $auteur['id_auteur'] = $id_auteur;
    if (!isset($auteur['hash_env'])) {
        $auteur['hash_env'] = hash_env();
    }
    if (!isset($auteur['ip_change'])) {
        $auteur['ip_change'] = false;
    }
    if (!isset($auteur['date_session'])) {
        $auteur['date_session'] = time();
    }
    if (is_string($auteur['prefs'])) {
        $auteur['prefs'] = unserialize($auteur['prefs']);
    }
    if (!ecrire_fichier_session($fichier_session, $auteur)) {
        spip_log('Echec ecriture fichier session ' . $fichier_session, _LOG_HS);
        include_spip('inc/minipres');
        echo minipres();
        exit;
    } else {
        include_spip('inc/cookie');
        $duree = _RENOUVELLE_ALEA * (!isset($auteur['cookie']) ? 2 : (is_numeric($auteur['cookie']) ? $auteur['cookie'] : 20));
        spip_setcookie('spip_session', $_COOKIE['spip_session'], time() + $duree);
        spip_log("ajoute session {$fichier_session} cookie {$duree}");
        # on en profite pour purger les vieilles sessions abandonnees
        supprimer_sessions(0, true, false);
        return $_COOKIE['spip_session'];
    }
}
Exemplo n.º 3
0
function ajouter_session($auteur) {
	// Si le client a deja une session valide pour son id_auteur
	// on conserve le meme fichier

	// Attention un visiteur peut avoir une session et un id=0,
	// => ne pas melanger les sessions des differents visiteurs
	$id_auteur = intval($auteur['id_auteur']);
	if (!isset($_COOKIE['spip_session'])
	OR !preg_match(',^'.$id_auteur.'_,', $_COOKIE['spip_session']))
		$_COOKIE['spip_session'] = $id_auteur.'_'.md5(uniqid(rand(),true));

	$fichier_session = fichier_session('alea_ephemere');
	
	// Si ce n'est pas un inscrit (les inscrits ont toujours des choses en session)
	// on verifie qu'il y a vraiment des choses
	if (!$id_auteur){
		// On supprime les basiques pour voir le contenu effectif
		$auteur_verif = $auteur;
		if (isset($auteur_verif['id_auteur'])) unset($auteur_verif['id_auteur']);
		if (isset($auteur_verif['hash_env'])) unset($auteur_verif['hash_env']);
		if (isset($auteur_verif['ip_change'])) unset($auteur_verif['ip_change']);
		
		// Les variables vraiment nulle ne sont pas à prendre en compte non plus
		foreach($auteur_verif as $variable=>$valeur){
			if ($valeur === null){
				unset($auteur_verif[$variable]);
			}
		}
		
		// Si c'est vide alors on supprime et on ne fait rien
		if (!$auteur_verif){
			if (@file_exists($fichier_session)) spip_unlink($fichier_session);
			return false;
		}
	}
	
	// Maintenant on sait qu'il faut memoriser.
	// On s'assure d'avoir au moins ces valeurs
	$auteur['id_auteur'] = $id_auteur;
	if (!isset($auteur['hash_env'])) $auteur['hash_env'] = hash_env();
	if (!isset($auteur['ip_change'])) $auteur['ip_change'] = false;

	if (!ecrire_fichier_session($fichier_session, $auteur)) {
		include_spip('inc/minipres');
		echo minipres();
		exit;
	} else {
		include_spip('inc/cookie');
		$duree = _RENOUVELLE_ALEA *
		  (!isset($auteur['cookie'])
		  	? 2 : (is_numeric($auteur['cookie'])
				? $auteur['cookie'] : 20));
		spip_setcookie(
			'spip_session',
			$_COOKIE['spip_session'],
			time() + $duree
			);
		spip_log("ajoute session $fichier_session cookie $duree");

		// purger au passage les vieux fichiers de session
		supprimer_sessions(-1);

		return $_COOKIE['spip_session'];
	}
}
Exemplo n.º 4
0
        fich_debug("DBG >> $cookie_session\n");
        // On poste le cookie de session
        spip_setcookie('spip_session', $cookie_session);
        // On loge l'authentification
        spip_log("login de $login depuis LCS");
    }
} elseif ( $action=="logout" ) {
    close_session($idpers);
    @define('_DIR_RESTREINT_ABS', 'ecrire/');
    include_once _DIR_RESTREINT_ABS.'inc_version.php';

    include_spip('inc/cookie');
    include_once  _DIR_RESTREINT_ABS.'auth/ldap.php';
    include_spip('inc/session');

    $result = spip_query("SELECT id_auteur FROM spip_auteurs WHERE login='******' AND source='ldap'");
    $row_auteur = spip_fetch_array($result);
    ### DBG
    fich_debug("DBG >> id auteur : ".$row_auteur['id_auteur']."\n");
    supprimer_sessions($row_auteur['id_auteur']);
    spip_setcookie('spip_session', '', 0);
} else fich_debug("DBG >> No login No logout\n");

#On redirige vesr la page d'accueil dans tous les cas
echo "<script language=\"JavaScript\" type=\"text/javascript\">\n";
echo "<!--\n";
echo "top.location.href = '../lcs/index.php?url_redirect=accueil.php';\n";
echo "//-->\n";
echo "</script>\n";
?>