$texte"; $texte .= ''; $res = minipres(_T('spip:icone_deconnecter'), $texte, '', true); echo $res; return; } include_spip('inc/auth'); auth_trace($GLOBALS['visiteur_session'], '0000-00-00 00:00:00'); // le logout explicite vaut destruction de toutes les sessions if (isset($_COOKIE['spip_session'])) { $session = charger_fonction('session', 'inc'); $session($GLOBALS['visiteur_session']['id_auteur']); spip_setcookie('spip_session', $_COOKIE['spip_session'], time() - 3600); } // si authentification http, et que la personne est loge, // pour se deconnecter, il faut proposer un nouveau formulaire de connexion http if (isset($_SERVER['PHP_AUTH_USER']) and !$GLOBALS['ignore_auth_http'] and $GLOBALS['auth_can_disconnect'] ) { ask_php_auth(_T('login_deconnexion_ok'), _T('login_verifiez_navigateur'), _T('login_retour_public'), "redirect=" . _DIR_RESTREINT_ABS, _T('login_test_navigateur'), true); } } // Rediriger en contrant le cache navigateur (Safari3) include_spip('inc/headers'); redirige_par_entete($url ? parametre_url($url, 'var_hasard', uniqid(rand()), '&') : generer_url_public('login')); } /** * Generer un jeton de logout personnel et ephemere * * @param array $session * @param null|string $alea * @return string */ function generer_jeton_logout($session, $alea = null) { if (is_null($alea)) { include_spip('inc/acces'); $alea = charger_aleas(); } $jeton = md5($session['date_session'] . $session['id_auteur'] . $session['statut'] . $alea ); return $jeton; } /** * Verifier que le jeton de logout est bon * * Il faut verifier avec alea_ephemere_ancien si pas bon avec alea_ephemere * pour gerer le cas de la rotation d'alea * * @param string $jeton * @param array $session * @return bool */ function verifier_jeton_logout($jeton, $session) { if (generer_jeton_logout($session) === $jeton) { return true; } if (generer_jeton_logout($session, $GLOBALS['meta']['alea_ephemere_ancien']) === $jeton) { return true; } return false; }