web-dev-qa-db-fra.com

Supprimer un cookie

Quand je veux enlever un cookie, j'essaie

unset($_COOKIE['hello']);

Je vois dans mon navigateur de cookie de Firefox que le cookie existe toujours. Comment puis-je vraiment supprimer le cookie?

222
sanders

Vous pouvez essayer ceci

if (isset($_COOKIE['remember_user'])) {
    unset($_COOKIE['Hello']);
    unset($_COOKIE['HelloTest1']);
    setcookie('Hello', null, -1, '/');
    setcookie('HelloTest1', null, -1, '/');
    return true;
} else {
    return false;
}
237
Nikunj K.

Définissez la valeur sur "" et la date d'expiration sur hier (ou toute date antérieure)

setcookie("hello", "", time()-3600);

Ensuite, le cookie expirera au prochain chargement de la page.

259
Re0sless

Une méthode simple pour supprimer un cookie consiste à effacer à la fois la valeur $_COOKIE et le fichier de cookie du navigateur:

if (isset($_COOKIE['key'])) {
    unset($_COOKIE['key']);
    setcookie('key', '', time() - 3600, '/'); // empty value and old timestamp
}
200
Mouloud

Pour supprimer de manière fiable un cookie, il ne suffit pas de le définir pour qu'il expire dans le passé, comme calculé par votre serveur PHP. En effet, les ordinateurs clients peuvent et ont souvent des heures différentes de celles de votre serveur.

La meilleure pratique consiste à écraser le cookie actuel avec un cookie vide qui expire une seconde. a l'avenir après l’époque (le 1er janvier 1970 à 00:00:00 UTC), ainsi:

setcookie("hello", "", 1);
21
Thejoker123

Cela désactivera le cookie dans votre code, mais comme la variable $ _COOKIE est actualisée à chaque demande, elle reviendra à la demande de page suivante.

Pour vous débarrasser du cookie, définissez la date d'expiration dans le passé:

// set the expiration date to one hour ago
setcookie("hello", "", time()-3600);
18
Eric Petroelje

J'ai eu le même problème dans mon code et j'ai découvert qu'il s'agissait d'un problème de chemin de cookie. Découvrez ce poste de débordement de pile: Impossible de supprimer le cookie du jeu php

J'avais défini le cookie en utilisant une valeur de chemin d'accès "/", mais je n'avais aucune valeur de chemin lorsque j'essayais de le supprimer, le résultat ne l'a donc pas été. Donc, voici un exemple de ce qui a fonctionné:

Paramétrer le cookie:

$cookiePath = "/";
$cookieExpire = time()+(60*60*24);//one day -> seconds*minutes*hours
setcookie("CookieName",$cookieValue,$cookieExpire,$cookiePath);

Effacer le cookie:

setcookie("cookieName","", time()-3600, $cookiePath);
unset ($_COOKIE['cookieName']);

J'espère que cela pourra aider.

13
user3285097

Si vous configurez le cookie pour qu'il expire dans le passé, le navigateur le supprimera. Voir setcookie () delete example sur php.net

7
Alistair Knock

Voir l'exemple intitulé " Example # 2 setcookie () delete example " dans la documentation PHP. Pour effacer un cookie du navigateur, vous devez informer le navigateur que le cookie a expiré ... le navigateur le supprimera. unset tel que vous l'avez utilisé supprime simplement le cookie 'hello' du tableau COOKIE.

6
Jarret Hardie

Voici comment fonctionne le code PHP v7 setcookie () lorsque vous procédez comme suit:

<?php
    setcookie('user_id','');
    setcookie('session','');
?>

À partir de la sortie de tcpdump lors de la détection du port 80, le serveur envoie au client (navigateur) les en-têtes HTTP suivants:

Set-Cookie: user_id=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0
Set-Cookie: session=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0

En observant les paquets dans les requêtes suivantes, le navigateur n'envoie plus ces cookies dans les en-têtes.

4
Nulik

Pour supprimer tous les cookies, vous pouvez écrire:

foreach ($_COOKIE as $key => $value) {
    unset($value);
    setcookie($key, '', time() - 3600);
}
3
Ralphe Samson

Pour supprimer le cookie, il vous suffit de définir la valeur sur NULL:

"Si vous avez défini un cookie avec des valeurs autres que par défaut pour une heure d'expiration, un chemin d'accès ou un domaine, vous devez redéfinir ces mêmes valeurs lorsque vous supprimez le cookie afin que le cookie soit supprimé correctement." Citation du livre "Learning PHP5".

Donc, ce code devrait fonctionner (fonctionne pour moi):

Réglage du cookie: setcookie('foo', 'bar', time() + 60 * 5);

Suppression du cookie: setcookie('foo', '', time() + 60 * 5);

Mais j’ai remarqué que tout le monde fixait la date d’expiration au-delà, est-ce nécessaire et pourquoi? 

3
boksa

Je sais que cela fait longtemps que ce sujet n'a pas été créé mais j'ai constaté une petite erreur dans cette solution (je peux l'appeler ainsi, parce que c'est un détail) ... Je suis d'accord pour dire que la meilleure solution est probablement la suivante Solution:

if (isset($_COOKIE['remember_user'])) {
            unset($_COOKIE['Hello']);
            unset($_COOKIE['HelloTest1']);
            setcookie('Hello', null, -1, '/');
            setcookie('HelloTest1', null, -1, '/');
            return true;
        } else {
            return false;
        }

Mais, dans le cas présent, vous supprimez les cookies dans tous les cas où la fonction de désactivation est activée et vous créez immédiatement de nouveaux cookies expirés au cas où la fonction de désactivation ne fonctionnerait pas.

Cela signifie que même si la fonction unset fonctionne, il y aura toujours 2 cookies sur l'ordinateur . L'objectif demandé, d'un point de vue logique, est de supprimer les cookies si c'est possible et si ce n'est vraiment pas le cas. , le faire expirer; pour obtenir le résultat "le plus propre".

Donc, je pense que nous devrions mieux faire:

if (isset($_COOKIE['remember_user'])) {
            setcookie('Hello', null, -1, '/');
            setcookie('HelloTest1', null, -1, '/');
            unset($_COOKIE['Hello']);
            unset($_COOKIE['HelloTest1']);
            return true;
        } else {
            return false;
        }

Merci et bonne journée :)

1
Greg
$cookie_name = "my cookie";
$cookie_value = "my value";
$cookie_new_value = "my new value";

// Create a cookie,
setcookie($cookie_name, $cookie_value , time() + (86400 * 30), "/"); //86400 = 24 hours in seconds

// Get value in a cookie,
$cookie_value = $_COOKIE[$cookie_name];

// Update a cookie,
setcookie($cookie_name, $cookie_new_value , time() + (86400 * 30), "/");

// Delete a cookie,
setcookie($cookie_name, '' , time() - 3600, "/"); //  time() - 3600 means, set the cookie expiration date to the past hour.
1

Il suffit de définir la date d'expiration sur une heure auparavant, si vous souhaitez "supprimer" le cookie, comme ceci:

setcookie ("TestCookie", "", time() - 3600);

ou

setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", "example.com", 1);

Source: http://www.php.net/manual/en/function.setcookie.php

Vous devriez utiliser la fonction filter_input() pour tous les globaux qu'un visiteur peut entrer/manipuler, comme ceci:

$visitors_ip = filter_input(INPUT_COOKIE, 'id');

Vous pouvez en savoir plus à ce sujet ici: http://www.php.net/manual/en/function.filter-input.php et ici: http://www.w3schools.com/php/ func_filter_input.asp

1
Jo Smo

Lorsque vous entrez 0 pour le temps, vous voulez dire "maintenant" pour le navigateur.

setcookie("key", NULL, 0, "/");

Je l'ai vérifié dans le navigateur chrome qui me donne:

Name: key
Content: Deleted
Created: Sunday, November 18, 2018 at 2:33:14 PM
Expires: Sunday, November 18, 2018 at 2:33:14 PM
0
Amir Forsati

Si vous souhaitez supprimer complètement le cookie de tout votre domaine actuel, le code suivant vous aidera certainement.

unset($_COOKIE['hello']);
setcookie("hello", "", time() - 300,"/");

Ce code supprimera complètement la variable cookie de tout votre domaine i.e; "/" - indique la valeur de la variable de cookie définie pour tous les domaines, pas seulement pour le domaine ou le chemin actuel time () - 300 indique qu'il a été mis à une heure antérieure pour qu'il expire.

Thats comment il est parfaitement supprimé.

0
Soumen Pasari

Vous pouvez simplement utiliser cette fonction de personnalisation:

function unset_cookie($cookie_name) {
    if (isset($_COOKIE[$cookie_name])) {
        unset($_COOKIE[$cookie_name]);
        setcookie($cookie_name, null, -1);
    } else { return false; }
}

Si vous souhaitez supprimer $ _COOKIE ['user_account'].
Il suffit d'utiliser:

unset_cookie('user_account');
0
Kenny

C'est simple!

setcookie("cookiename", "cookievalue", 1);
0
L F

Vous pouvez définir une variable de session basée sur les valeurs de cookie

session_start();

if(isset($_COOKIE['loggedin']) && ($_COOKIE['loggedin'] == "true") ){
$_SESSION['loggedin'] = "true";
}

echo ($_SESSION['loggedin'] == "true" ? "You are logged in" : "Please Login to continue");
0
_11one