Vous pouvez trouver $cookie->delete()sur github.com/delight-im/PHP-Cookie utile. Le code de la question supprime simplement la propriété qui a été analysée côté serveur. Le cookie continuera de vivre côté client.
Je comprends qu'il s'agit d'un exemple, mais veuillez ne jamais stocker de nom d'utilisateur ou de mot de passe dans des cookies.
tamasd
3
C'est inutile unset($_COOKIE['Hello']);. Cela ne change rien si vous le supprimez.
machineaddict
30
@machineaddict unset($_COOKIE['Hello']);est en fait important si vous pouvez vérifier le cookie quelque part plus tard dans le code.
Andreas Hultgren
4
fonctionne bien mais quand essayez de recharger la page. il a vu des cookies avec d'anciennes données pourquoi?.
Nilesh patel
9
======= NE FONCTIONNE PAS DANS CHROME ======= J'ai essayé ce code aujourd'hui et lorsque j'accède au site à l'aide de Google Chrome, puis que j'entre dans les outils de développement dans Chrome, je peux voir que le délai d'expiration est défini sur 1 seconde avant l'époque (par exemple, 1969-12-31 23:59:59), mais lorsque je soumets la page suivante, le cookie est soumis au serveur. Lorsque j'ai changé le -1 en 1 (par exemple 1970-01-01 00:00:01) pour donner la commande suivante: setcookie ('Hello', null, 1, '/'); puis chrome a agi comme prévu et n'a pas soumis le cookie
Peter Hinds
284
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 lors du prochain chargement de la page.
Que diriez-vous de régler l'heure à 0 (l'époque)? =]
strager
12
Si vous placez une date trop loin dans le passé, IE l'aboie et l'ignore, c'est-à-dire que la valeur ne sera pas supprimée.
Julien
52
@strager Le manuel indique: s'il est défini sur 0 ou omis, le cookie expirera à la fin de la session (à la fermeture du navigateur). Cela ne supprime pas vraiment le cookie. Je ne sais vraiment pas si IE fera ce que Julien a dit, mais il est plus que possible qu'IE fera quelque chose d'étrange.
yannis
31
N'oubliez pas non plus de réellement désactiver ($ _ COOKIE ["hello"]), car s'il y a du code sur le reste de la page qui regarde $ _COOKIE ["hello"], il le trouvera toujours défini. Je viens de mordre par celui-ci.
Magmatic
12
De plus, c'est une bonne idée de définir le chemin, donc setcookie ('hello', '', time () - 3600, '/');
Stephan Weinhold
227
Une façon propre de supprimer un cookie consiste à effacer à la fois la $_COOKIEvaleur et le fichier de cookie du navigateur:
if(isset($_COOKIE['key'])){
unset($_COOKIE['key']);
setcookie('key','', time()-3600,'/');// empty value and old timestamp}
C'est la meilleure méthode, car vous n'avez pas besoin de rafraîchir la page!
MaxV
19
Je continue de descendre la page et les réponses s'améliorent, drôle. Mais c'est le meilleur, arrêtez de chercher ici.
Andrew
23
Pour info, si vous définissez le cookie en utilisant un chemin, vous devrez également inclure le chemin dans cet setcookieappel:setcookie('key', '', time() - 3600, '/');
Gavin
1
@Gavin Merci pour cette astuce. Je me demandais pourquoi il ne supprimait pas, mais unsettingavec succès.
stinkysGTI
1
Pour toute personne qui vérifie l'existence d'un cookie et se soucie des cookies qui existent avec des nullvaleurs, vous devrez utiliser array_key_exists () à la place, car un cookie avec une nullvaleur ne sera pas trouvé par une isset()vérification.
Leith
27
Pour supprimer un cookie de manière fiable, il ne suffit pas de le configurer pour qu'il expire à tout moment dans le passé, tel que 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 à remplacer le cookie actuel par un cookie vierge qui expire une seconde dans le futur après l'époque (1er janvier 1970 00:00:00 UTC), comme suit:
Corrigez-moi si je me trompe, mais le régler sur "1" le mettrait à une seconde après l'époque, pas une seconde à l'avenir ..? Je pense que vous avez raison sur les différences de fuseau horaire, donc la meilleure solution serait de le régler sur 2 jours dans le passé (donc même le fuseau horaire le plus éloigné effacerait toujours le cookie).
PaulSkinner
@PaulSkinner la date de l'époque est indépendante des fuseaux horaires, l'ordinateur fait ce calcul pour vous.
AlexR
3
@AlexR Oui. Ne répond pas vraiment à mon argument. À ma connaissance, le code ci - dessus définit le cookie pour expirer dans le passé (une seconde après l'époque), sauf erreur de ma part.
PaulSkinner
@PaulSkinner bien sûr, le reste de votre commentaire est parfaitement bien.
AlexR
9
+1 pour le "1". Je ne comprends pas pourquoi tous les autres sont si déterminés à définir un cookie supprimé exactement une heure dans le passé.
Meisner
20
Cela supprimera le cookie dans votre code, mais comme la variable $ _COOKIE est actualisée à chaque demande, elle reviendra simplement à la demande de page suivante.
Pour supprimer le cookie, définissez la date d'expiration dans le passé:
// set the expiration date to one hour ago
setcookie("hello","", time()-3600);
@PratikCJoshi Uniquement si votre code le recherche plus tard.
AlphaMycelium
14
J'ai eu le même problème dans mon code et j'ai constaté qu'il s'agissait d'un problème de chemin d'accès aux cookies. Consultez ce message de débordement de pile: impossible de supprimer le cookie de 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 d'accès lorsque j'essayais de l'effacer, donc il ne s'est pas effacé. Voici donc un exemple de ce qui a fonctionné:
Définition du cookie:
$cookiePath ="/";
$cookieExpire = time()+(60*60*24);//one day -> seconds*minutes*hours
setcookie("CookieName",$cookieValue,$cookieExpire,$cookiePath);
Voir l'exemple intitulé " Exemple # 2 exemple de suppression de setcookie () " dans la documentation PHP. Pour effacer un cookie du navigateur, vous devez informer le navigateur que le cookie a expiré ... le navigateur le supprimera ensuite. unsetcomme vous l'avez utilisé, il supprime simplement le cookie «bonjour» du tableau COOKIE.
Pour supprimer le cookie, il vous suffit de définir la valeur sur NULL:
"Si vous avez défini un cookie avec des valeurs non par défaut pour un délai d'expiration, un chemin ou un domaine, vous devez fournir à nouveau ces mêmes valeurs lorsque vous supprimez le cookie pour que le cookie soit supprimé correctement." Citation du livre "Learning PHP5".
Donc, ce code devrait fonctionner (fonctionne pour moi):
Définition 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 passé, est-ce nécessaire et pourquoi?
C'est fiable, c'est pourquoi. Une combinaison de la définition de la valeur à rien et d'un temps dans le passé (mais pas trop loin car IE ne l'aime pas parfois trop loin de ce que j'ai lu) fonctionne à tous les niveaux.
PaulSkinner
La chaîne vide ''n'est pas la même chose que null.
orev
3
Pour supprimer tous les cookies, vous pouvez écrire:
foreach($_COOKIE as $key => $value){
unset($value);
setcookie($key,'', time()-3600);}
Cela ne supprimera pas réellement les cookies, sauf s'ils ont le même chemin d'accès et les mêmes paramètres de domaine que les valeurs par défaut de setcookie.
Noishe
2
Définissez simplement la date d'expiration sur une heure, si vous souhaitez "supprimer" le cookie, comme ceci:
Je sais qu'il y a longtemps que ce sujet n'a pas été créé mais j'ai vu une petite erreur dans cette solution (je peux l'appeler comme ça, car c'est un détail). Je suis d'accord que la meilleure solution est probablement cette solution:
Mais, dans le cas présent, vous supprimez les cookies dans tous les cas où la fonction non définie fonctionne et vous créez immédiatement de nouveaux cookies expirés au cas où la fonction non définie ne fonctionnerait pas.
Cela signifie que même si la fonction non définie fonctionne, elle contiendra toujours 2 cookies sur l'ordinateur. L'objectif demandé, d'un point de vue logique, est de supprimer les cookies si cela est possible et si ce n'est vraiment pas le cas, de les faire expirer; pour obtenir le résultat "le plus propre".
La fonction unset est destinée à la logique de PHP (si vous voulez utiliser la variable $ _COOKIE ['Hello'], vous ne pouvez pas car elle est unset). Et la fonction setcookie est destinée au navigateur. 2 objectifs différents, l'ordre des fonctions n'a aucun impact sur le code réel.
Kalzem
En fait, je le savais, mais si vous voulez absolument être sûr que le cookie a été désactivé / supprimé et que vous utilisez les deux solutions tout de suite, il serait plus propre avant de faire expirer les thèses, puis de supprimer les thèses que de supprimer les thèses et puis recréez un cookie expiré ... si vous voyez ce que je veux dire?
Greg
Oui, désolé de répondre tout à l'heure :) Je l'ai envoyé parce que j'avais vu des gens le faire de l'autre manière .. mais ça semble plus intelligent comme ça, je pense.
Greg
2
$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.
Ce code supprimera complètement la variable cookie de tout votre domaine, c'est-à-dire; "/" - il indique que la valeur de la variable de cookie est définie pour tout le domaine et pas seulement pour le domaine ou le chemin actuel. time () - 300 indique qu'il est défini sur une heure précédente, il expirera donc.
Vous pouvez définir une variable de session basée sur les valeurs des cookies
session_start();if(isset($_COOKIE['loggedin'])&&($_COOKIE['loggedin']=="true")){
$_SESSION['loggedin']="true";}
echo ($_SESSION['loggedin']=="true"?"You are logged in":"Please Login to continue");
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{returnfalse;}}
Si vous souhaitez supprimer $ _COOKIE ['user_account'].
Utilisez simplement:
Il n'est pas nécessaire de définir la valeur d'un cookie de suppression!
Amir Fo
1
Lorsque vous entrez 0pour le temps, vous voulez dire "maintenant" (+ 0 à partir de maintenant est en fait maintenant) pour le navigateur et il supprime le cookie.
setcookie("key", NULL,0,"/");
Je l'ai vérifié dans le navigateur Chrome qui me donne:
Name: key
Content:DeletedCreated:Sunday,November18,2018 at 2:33:14 PM
Expires:Sunday,November18,2018 at 2:33:14 PM
Non. Il suffit de lire les documents. "S'il est défini sur 0 ou omis, le cookie expirera à la fin de la session (à la fermeture du navigateur)."
DrLightman
@DrLightman Merci de votre présence. Pouvez-vous citer la documentation?
Amir Fo
function.setcookie.php , expire le paramètre. "S'il est défini sur 0 ou omis, le cookie expirera à la fin de la session (à la fermeture du navigateur)."
DrLightman
1
Définissez simplement la valeur du cookie falsepour le désactiver,
Vous devez supprimer les cookies avec php dans votre serveur et aussi avec js pour votre navigateur .. (Ils l'ont fait avec php, mais les fichiers cookies sont également dans le client du navigateur):
Un exemple:
if($_GET['action']=='exit'){// delete cookies with js and then in server with php:
echo '
<script type="text/javascript">
var delete_cookie = function(name) {
document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:01 GMT;";
};
delete_cookie("madw");
delete_cookie("usdw");
</script>
';
unset($_COOKIE['cookie_name']);
unset($_COOKIE['cookie_time']);
Vous n'avez pas besoin de JavaScript pour définir / supprimer la valeur du cookie. La fonction php setcookie le fera pour vous php.net/manual/en/function.setcookie.php
Michael Khalili
-5
La plupart d'entre vous oublient que cela ne fonctionnera que sur une machine locale. Sur un domaine, vous aurez besoin d'un modèle comme cet exemple.
Le paramètre de domaine signifiera le domaine actuel s'il est omis.
DustWolf
Je voulais dire que votre réponse est incorrecte. Il fonctionnera pour n'importe quel domaine, pas seulement pour la machine locale, car il utilisera automatiquement le domaine actuel. Et votre commentaire veut dire que vous êtes offensé ou quelque chose?
DustWolf
Lisez-vous même le texte qui est suffisamment au-dessus du code? arrête de m'embêter, je travaille. j'ai fini de parler avec u.
Peter Gruppelaar
Je ne comprends pas pourquoi vous vous fâchez contre les autres utilisateurs s'ils signalent une erreur dans votre réponse. setcookiefonctionne pour n'importe quel domaine, qu'il soit localhost ou non.
xorinzor
Donc, si tout le monde dit que c'est le cas ... alors il doit y avoir quelque chose qui ne va manifestement pas dans ma réponse ... le chapeau fct qui a été souligné dans ce post n'a pas d'importance? ... vous voulez seulement une sorte de réponse , et ignorez tous les utilisateurs mondiaux qui travaillent sur une situation similaire ... je comprends ... arrêtez de m'embêter, ma réponse n'est pas fausse.
$cookie->delete()
sur github.com/delight-im/PHP-Cookie utile. Le code de la question supprime simplement la propriété qui a été analysée côté serveur. Le cookie continuera de vivre côté client.Réponses:
Vous pouvez essayer ceci
la source
unset($_COOKIE['Hello']);
. Cela ne change rien si vous le supprimez.unset($_COOKIE['Hello']);
est en fait important si vous pouvez vérifier le cookie quelque part plus tard dans le code.Définissez la valeur sur "" et la date d'expiration sur hier (ou toute date antérieure)
Ensuite, le cookie expirera lors du prochain chargement de la page.
la source
Une façon propre de supprimer un cookie consiste à effacer à la fois la
$_COOKIE
valeur et le fichier de cookie du navigateur:la source
setcookie
appel:setcookie('key', '', time() - 3600, '/');
unsetting
avec succès.null
valeurs, vous devrez utiliser array_key_exists () à la place, car un cookie avec unenull
valeur ne sera pas trouvé par uneisset()
vérification.Pour supprimer un cookie de manière fiable, il ne suffit pas de le configurer pour qu'il expire à tout moment dans le passé, tel que 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 à remplacer le cookie actuel par un cookie vierge qui expire une seconde
dans le futuraprès l'époque (1er janvier 1970 00:00:00 UTC), comme suit:la source
Cela supprimera le cookie dans votre code, mais comme la variable $ _COOKIE est actualisée à chaque demande, elle reviendra simplement à la demande de page suivante.
Pour supprimer le cookie, définissez la date d'expiration dans le passé:
la source
unset()
cookie n'est-il pas nécessaire ?J'ai eu le même problème dans mon code et j'ai constaté qu'il s'agissait d'un problème de chemin d'accès aux cookies. Consultez ce message de débordement de pile: impossible de supprimer le cookie de 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 d'accès lorsque j'essayais de l'effacer, donc il ne s'est pas effacé. Voici donc un exemple de ce qui a fonctionné:
Définition du cookie:
Effacer le cookie:
J'espère que cela pourra aider.
la source
Si vous avez configuré le cookie pour qu'il expire dans le passé, le navigateur le supprimera. Voir l' exemple de suppression de setcookie () sur php.net
la source
Voir l'exemple intitulé " Exemple # 2 exemple de suppression de setcookie () " dans la documentation PHP. Pour effacer un cookie du navigateur, vous devez informer le navigateur que le cookie a expiré ... le navigateur le supprimera ensuite.
unset
comme vous l'avez utilisé, il supprime simplement le cookie «bonjour» du tableau COOKIE.la source
Voici comment fonctionne le code PHP v7 setcookie ():
À partir de la sortie de tcpdump en reniflant sur le port 80, le serveur envoie au client (navigateur) les en-têtes HTTP suivants:
En observant les paquets dans les requêtes suivantes, le navigateur n'envoie plus ces cookies dans les en-têtes
la source
Pour supprimer le cookie, il vous suffit de définir la valeur sur NULL:
"Si vous avez défini un cookie avec des valeurs non par défaut pour un délai d'expiration, un chemin ou un domaine, vous devez fournir à nouveau ces mêmes valeurs lorsque vous supprimez le cookie pour que le cookie soit supprimé correctement." Citation du livre "Learning PHP5".
Donc, ce code devrait fonctionner (fonctionne pour moi):
Définition 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 passé, est-ce nécessaire et pourquoi?
la source
''
n'est pas la même chose quenull
.Pour supprimer tous les cookies, vous pouvez écrire:
la source
Définissez simplement la date d'expiration sur une heure, si vous souhaitez "supprimer" le cookie, comme ceci:
ou
Source: http://www.php.net/manual/en/function.setcookie.php
Vous devez utiliser la
filter_input()
fonction pour tous les globaux qu'un visiteur peut entrer / manipuler, comme ceci: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
la source
Je sais qu'il y a longtemps que ce sujet n'a pas été créé mais j'ai vu une petite erreur dans cette solution (je peux l'appeler comme ça, car c'est un détail). Je suis d'accord que la meilleure solution est probablement cette solution:
Mais, dans le cas présent, vous supprimez les cookies dans tous les cas où la fonction non définie fonctionne et vous créez immédiatement de nouveaux cookies expirés au cas où la fonction non définie ne fonctionnerait pas.
Cela signifie que même si la fonction non définie fonctionne, elle contiendra toujours 2 cookies sur l'ordinateur. L'objectif demandé, d'un point de vue logique, est de supprimer les cookies si cela est possible et si ce n'est vraiment pas le cas, de les faire expirer; pour obtenir le résultat "le plus propre".
Donc, je pense que nous devrions mieux faire:
Merci et bonne journée :)
la source
la source
Si vous souhaitez supprimer complètement le cookie de tout votre domaine actuel, le code suivant vous aidera certainement.
Ce code supprimera complètement la variable cookie de tout votre domaine, c'est-à-dire; "/" - il indique que la valeur de la variable de cookie est définie pour tout le domaine et pas seulement pour le domaine ou le chemin actuel. time () - 300 indique qu'il est défini sur une heure précédente, il expirera donc.
Voilà comment il est parfaitement supprimé.
la source
Vous pouvez définir une variable de session basée sur les valeurs des cookies
la source
Vous pouvez simplement utiliser cette fonction de personnalisation:
Si vous souhaitez supprimer $ _COOKIE ['user_account'].
Utilisez simplement:
la source
C'est simple!
la source
Lorsque vous entrez
0
pour le temps, vous voulez dire "maintenant" (+ 0 à partir de maintenant est en fait maintenant) pour le navigateur et il supprime le cookie.Je l'ai vérifié dans le navigateur Chrome qui me donne:
la source
Définissez simplement la valeur du cookie
false
pour le désactiver,PS: - C'est la façon la plus simple de le faire.
la source
Vous devez supprimer les cookies avec php dans votre serveur et aussi avec js pour votre navigateur .. (Ils l'ont fait avec php, mais les fichiers cookies sont également dans le client du navigateur):
Un exemple:
la source
La plupart d'entre vous oublient que cela ne fonctionnera que sur une machine locale. Sur un domaine, vous aurez besoin d'un modèle comme cet exemple.
la source
setcookie
fonctionne pour n'importe quel domaine, qu'il soit localhost ou non.