Skip to content
Extraits de code Groupes Projets
spip_cookie.php3 6,74 ko
Newer Older
<?php
Yannick Patois's avatar
Yannick Patois a validé

include ("ecrire/inc_version.php3");
include_ecrire ("inc_session.php3");

// determiner ou l'on veut retomber
Antoine Pitrou's avatar
Antoine Pitrou a validé
	$cible = new Link($url);
else
Antoine Pitrou's avatar
Antoine Pitrou a validé
	$cible = new Link('ecrire/');
// cas particulier, logout dans l'espace public
if ($logout_public) {
    $logout = $logout_public;
	if (!$url)
		$url = 'index.php3';
}

// rejoue le cookie pour renouveler spip_session
Fil's avatar
 
Fil a validé
if ($change_session == 'oui') {
	if (verifier_session($spip_session)) {
		// Attention : seul celui qui a le bon IP a le droit de rejouer,
		// ainsi un eventuel voleur de cookie ne pourrait pas deconnecter
		// sa victime, mais se ferait deconnecter par elle.
		if ($auteur_session['hash_env'] == hash_env()) {
			$auteur_session['ip_change'] = false;
			$cookie = creer_cookie_session($auteur_session);
			supprimer_session($spip_session);
			spip_setcookie('spip_session', $cookie);
Antoine Pitrou's avatar
Antoine Pitrou a validé
		@header('Content-Type: image/gif');
		@header('Expires: 0');
		@header("Cache-Control: no-store, no-cache, must-revalidate");
Antoine Pitrou's avatar
Antoine Pitrou a validé
		@header('Pragma: no-cache');
		@header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
Antoine Pitrou's avatar
Antoine Pitrou a validé
		@readfile('ecrire/img_pack/rien.gif');
// tentative de connexion en auth_http
Fil's avatar
Fil a validé
if ($essai_auth_http AND !$ignore_auth_http) {
	include_local ("inc-login.php3");
	auth_http($cible, $essai_auth_http);
	exit;
}

// tentative de logout
if ($logout) {
	include_ecrire("inc_session.php3");
	verifier_visiteur();
	if ($auteur_session['login'] == $logout) {
		spip_query("UPDATE spip_auteurs SET en_ligne = DATE_SUB(NOW(),INTERVAL 6 MINUTE) WHERE id_auteur = ".$auteur_session['id_auteur']);
		if ($spip_session) {
			zap_sessions($auteur_session['id_auteur'], true);
			spip_setcookie('spip_session', $spip_session, time() - 3600 * 24);
Fil's avatar
Fil a validé
		if ($PHP_AUTH_USER AND !$ignore_auth_http) {
			include_local ("inc-login.php3");
			auth_http($cible, 'logout');
		@Header("Location: ./spip_login.php3");
// en cas de login sur bonjour=oui, on tente de poser un cookie
// puis de passer a spip_login qui diagnostiquera l'echec de cookie
// le cas echeant.
if ($test_echec_cookie == 'oui') {
	spip_setcookie('spip_session', 'test_echec_cookie');
	$link = new Link("spip_login.php3?var_echec_cookie=oui");
	$link->addVar("var_url", $cible->getUrl());
	@header("Location: ".$link->getUrl());
	exit;
}

Antoine Pitrou's avatar
Antoine Pitrou a validé
// Tentative de login
if ($essai_login == "oui") {
Antoine Pitrou's avatar
Antoine Pitrou a validé
	// Recuperer le login en champ hidden
	if ($session_login_hidden AND !$session_login)
		$session_login = $session_login_hidden;
Antoine Pitrou's avatar
Antoine Pitrou a validé
	$login = $session_login;
	$pass = $session_password;

	// Recuperer le mot de passe en champ hidden
	if ($session_password_md5) { // mot passe en md5
Fil's avatar
Fil a validé
		$md5pass = $session_password_md5;
		$md5next = $next_session_password_md5;
Antoine Pitrou's avatar
Antoine Pitrou a validé
	else if ($session_password) { // mot passe en clair
Fil's avatar
Fil a validé
		$query = "SELECT alea_actuel, alea_futur FROM spip_auteurs WHERE login='".addslashes($login)."' AND statut!='5poubelle'";
Fil's avatar
Fil a validé
		$result = spip_query($query);
		if ($row = spip_fetch_array($result)) {
Fil's avatar
Fil a validé
			$md5pass = md5($row['alea_actuel'] . $session_password);
			$md5next = md5($row['alea_futur'] . $session_password);
		}
	}

Antoine Pitrou's avatar
Antoine Pitrou a validé
	// Essayer differentes methodes d'authentification
	$auths = array('spip');
	if ($ldap_present) $auths[] = 'ldap';
Antoine Pitrou's avatar
Antoine Pitrou a validé
	$ok = false;
	reset($auths);
	while (list(, $nom_auth) = each($auths)) {
		include_ecrire("inc_auth_".$nom_auth.".php3");
		$classe_auth = "Auth_".$nom_auth;
		$auth = new $classe_auth;
		if ($auth->init()) {
			$ok = $auth->verifier_challenge_md5($login, $md5pass, $md5next);
			if (!$ok && $session_password) $ok = $auth->verifier($login, $session_password);
Fil's avatar
Fil a validé
		}
Antoine Pitrou's avatar
Antoine Pitrou a validé
		if ($ok) break;
	}

	if ($ok) $ok = $auth->lire();

	if ($ok) {
		$auth->activer();

		if ($auth->login AND $auth->statut == '0minirezo') // force le cookie pour les admins
			$cookie_admin = "@".$auth->login;

		$query = "SELECT * FROM spip_auteurs WHERE login='".addslashes($auth->login)."'";
Antoine Pitrou's avatar
Antoine Pitrou a validé
		$result = spip_query($query);
Antoine Pitrou's avatar
Antoine Pitrou a validé
		if ($row_auteur = spip_fetch_array($result))
Antoine Pitrou's avatar
Antoine Pitrou a validé
			$cookie_session = creer_cookie_session($row_auteur);
Fil's avatar
Fil a validé

		if (ereg("ecrire/", $cible->getUrl())) {
			$cible->addVar('bonjour','oui');
Fil's avatar
Fil a validé
		if (ereg("ecrire/", $cible->getUrl())) {
Fil's avatar
Fil a validé
			$cible = new Link("./spip_login.php3");
		}
Antoine Pitrou's avatar
Antoine Pitrou a validé
		$cible->addVar('var_login', $login);
		if ($session_password || $session_password_md5)
			$cible->addVar('var_erreur', 'pass');
		$cible->addVar('var_url', urldecode($url));
Yannick Patois's avatar
Yannick Patois a validé

Antoine Pitrou's avatar
Antoine Pitrou a validé

if ($cookie_admin == "non") {
	spip_setcookie('spip_admin', $spip_admin, time() - 3600 * 24);
	$cible->delVar('var_login');
else if ($cookie_admin AND $spip_admin != $cookie_admin) {
	spip_setcookie('spip_admin', $cookie_admin, time() + 3600 * 24 * 14);
Antoine Pitrou's avatar
Antoine Pitrou a validé
if ($cookie_session) {
Fil's avatar
Fil a validé
	if ($session_remember == 'oui')
Antoine Pitrou's avatar
Antoine Pitrou a validé
		spip_setcookie('spip_session', $cookie_session, time() + 3600 * 24 * 14);
	else
		spip_setcookie('spip_session', $cookie_session);
Fil's avatar
Fil a validé

	$prefs = ($row_auteur['prefs']) ? unserialize($row_auteur['prefs']) : array();
	$prefs['cnx'] = ($session_remember == 'oui') ? 'perma' : '';
	spip_query ("UPDATE spip_auteurs SET prefs = '".addslashes(serialize($prefs))."' WHERE id_auteur = ".$row_auteur['id_auteur']);

Antoine Pitrou's avatar
Antoine Pitrou a validé
}
// changement de langue espace public
if ($var_lang) {
	include_ecrire('inc_lang.php3');

Fil's avatar
Fil a validé
	if (changer_langue($var_lang)) {
		spip_setcookie('spip_lang', $var_lang, time() + 365 * 24 * 3600);
Fil's avatar
Fil a validé
		$cible->delvar('lang');
		$cible->addvar('lang', $var_lang);
	}
}

// changer de langue espace prive (ou login)
	include_ecrire('inc_lang.php3');
	include_ecrire("inc_session.php3");
	verifier_visiteur();

	if (changer_langue($var_lang_ecrire)) {
		spip_setcookie('spip_lang_ecrire', $var_lang_ecrire, time() + 365 * 24 * 3600);
		spip_setcookie('spip_lang', $var_lang_ecrire, time() + 365 * 24 * 3600);
		if (@file_exists('ecrire/inc_connect.php3')) {
			include_ecrire('inc_admin.php3');
			if (verifier_action_auteur('var_lang_ecrire', $valeur, $id_auteur)) {
				spip_query ("UPDATE spip_auteurs SET lang = '".addslashes($var_lang_ecrire)."' WHERE id_auteur = ".$id_auteur);
				$auteur_session['lang'] = $var_lang_ecrire;
				ajouter_session($auteur_session, $spip_session);	// enregistrer dans le fichier de session
			}

		$cible->delvar('lang');
		$cible->addvar('lang', $var_lang_ecrire);
Antoine Pitrou's avatar
Antoine Pitrou a validé
// Redirection
// Sous Apache, les cookies avec une redirection fonctionnent
Antoine Pitrou's avatar
Antoine Pitrou a validé
// Sinon, on fait un refresh HTTP
if (ereg("^Apache", $SERVER_SOFTWARE)) {
	@header("Location: " . $cible->getUrl());
}
else {
	@header("Refresh: 0; url=" . $cible->getUrl());
	echo "<html><head>";
	echo "<meta http-equiv='Refresh' content='0; url=".$cible->getUrl()."'>";
	echo "</head>\n";
Fil's avatar
Fil a validé
	echo "<body><a href='".$cible->getUrl()."'>"._T('navigateur_pas_redirige')."</a></body></html>";
Antoine Pitrou's avatar
Antoine Pitrou a validé
}
Yannick Patois's avatar
Yannick Patois a validé

Fil's avatar
Fil a validé
?>