/** * 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); } } }
/** * 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']; } }
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']; } }
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"; ?>