+/**
+ * Verifier un jeton si present, ou envoyer une page le produisant
+ * @param string $logout
+ * @param string $url
+ * @param string $jeton
+ * @return boolean
+ */
+
+function action_logout_secu($logout, $url, $jeton)
+{
+ if ($jeton AND verifier_jeton_logout($jeton,$GLOBALS['visiteur_session']))
+ return true;
+ $jeton = generer_jeton_logout($GLOBALS['visiteur_session']);
+ $action = generer_url_action("logout","jeton=$jeton");
+ $action = parametre_url($action,'logout',$logout);
+ $action = parametre_url($action,'url',$url);
+ include_spip("inc/minipres");
+ include_spip("inc/filtres");
+ $texte = bouton_action(_T('spip:icone_deconnecter'),$action);
+ $texte = "<div class='boutons'>$texte</div>";
+ $texte .= '<script type="text/javascript">document.write("<style>body{visibility:hidden;}</style>");window.document.forms[0].submit();</script>';
+ echo minipres(_T('spip:icone_deconnecter'),$texte,'',true);
+ return false;
+}
+
+/**
+ * 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)){
+ if (!isset($GLOBALS['meta']['alea_ephemere'])){
+ include_spip('base/abstract_sql');
+ $GLOBALS['meta']['alea_ephemere'] = sql_getfetsel('valeur', 'spip_meta', "nom='alea_ephemere'");
+ }
+ $alea = $GLOBALS['meta']['alea_ephemere'];
+ }
+
+ $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 (!isset($GLOBALS['meta']['alea_ephemere_ancien'])){
+ include_spip('base/abstract_sql');
+ $GLOBALS['meta']['alea_ephemere_ancien'] = sql_getfetsel('valeur', 'spip_meta', "nom='alea_ephemere_ancien'");
+ }
+ if (generer_jeton_logout($session,$GLOBALS['meta']['alea_ephemere_ancien'])===$jeton)
+ return true;
+ return false;
+}
+