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?
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.
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
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.