web-dev-qa-db-fra.com

(PHP) Comment détruire correctement le cookie de session?

J'essaie de me déconnecter correctement d'un utilisateur administrateur. Voici ma fonction:

function logout()
{
    $_SESSION = array(); //destroy all of the session variables
    if (ini_get("session.use_cookies")) {
        $params = session_get_cookie_params();
        setcookie(session_name(), '', time() - 42000,
            $params["path"], $params["domain"],
            $params["secure"], $params["httponly"]
        );
    }
    session_destroy();
}

Fondamentalement, une fois que j'ai authentifié le mot de passe, j'ai défini la session comme étant valide (seulement 1 utilisateur au total). Maintenant, lorsque l'administrateur frappe la déconnexion, je veux détruire la session en cours, et également détruire le cookie, afin qu'ils ne puissent pas simplement revenir à la page d'administration en utilisant le cookie de session stocké dans le navigateur. mais mon code ne fonctionne pas. je frappe déconnexion, et je peux simplement revenir directement à la page d'administration. cependant, si je supprime mes cookies, la fonctionnalité est parfaite. alors qu'est-ce qui ne va pas avec la fonction de suppression des cookies ici?

17
Tony Stark

Votre problème n'est peut-être pas le cookie, mais le navigateur affichant une version mise en cache de votre page d'administration. Serait-ce possible? S'il disparaît lorsque vous frappez F5, c'est probablement ça. Cela peut être trié en définissant le bon cache-control en-têtes.

Découvrez cette SO question sur la question de savoir comment définir la mise en cache. La question est à peu près l'inverse (forcer les navigateurs à mettre en cache), mais vous comprendrez quoi changer pour désactiver la mise en cache.

7
Pekka

Si vous voulez vraiment couvrir toutes les bases, essayez de faire:

setcookie (session_id(), "", time() - 3600);
session_destroy();
session_write_close();

Cela devrait empêcher tout accès supplémentaire aux données de session pour le reste de PHP. Le navigateur peut toujours afficher le cookie en cours de définition, mais le super $ _SESSION sera vide

9
MANCHUCK

Juste un conseil pour ceux qui ont des problèmes pour expirer les cookies de session:

PHP - pourquoi ne puis-je pas me débarrasser de ce cookie d'identification de session?

Utilisez toujours session_get_cookie_params () comme dans la réponse à la question du lien ci-dessus.

4
bearfriend