Файловый менеджер - Редактировать - /home/atelierpru/provence/ecrire/action/logout.php
Назад
<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ /** * Action pour déconnecter une personne authentifiée * * @package SPIP\Core\Authentification */ if (!defined('_ECRIRE_INC_VERSION')) { return; } include_spip('inc/cookie'); /** * Se déloger * * Pour éviter les CSRF on passe par une étape de confirmation si pas de jeton fourni * avec un autosubmit js pour ne pas compliquer l'expérience utilisateur * * Déconnecte l'utilisateur en cours et le redirige sur l'URL indiquée par * l'argument de l'action sécurisée, et sinon sur la page d'accueil * de l'espace public. * */ function action_logout_dist() { $logout = _request('logout'); $url = securiser_redirect_action(_request('url')); // cas particulier, logout dans l'espace public if ($logout == 'public' and !$url) { $url = url_de_base(); } // seul le loge peut se deloger (mais id_auteur peut valoir 0 apres une restauration avortee) if (isset($GLOBALS['visiteur_session']['id_auteur']) and is_numeric($GLOBALS['visiteur_session']['id_auteur']) // des sessions anonymes avec id_auteur=0 existent, mais elle n'ont pas de statut : double check and isset($GLOBALS['visiteur_session']['statut']) ) { // il faut un jeton pour fermer la session (eviter les CSRF) if (!$jeton = _request('jeton') or !verifier_jeton_logout($jeton, $GLOBALS['visiteur_session']) ) { $jeton = generer_jeton_logout($GLOBALS['visiteur_session']); $action = generer_url_action("logout", "jeton=$jeton"); $action = parametre_url($action, 'logout', _request('logout')); $action = parametre_url($action, 'url', _request('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>'; $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; }
| ver. 1.4 |
Github
|
.
| PHP 7.0.33 | Генерация страницы: 0.02 |
proxy
|
phpinfo
|
Настройка