j'ai un site qui utilise divers cookies à divers endroits de
l'arborescence, et je cherche un moyen "direct" de tous les supprimer
(en PHP), sans avoir à faire :
setcookie("mon_cookie","",time()-3600);
pour chaque cookie créé.
En gros, une fonction delete_all_cookie_from_ze_domaine ! ;-)
Si ça existe...
Merci à ceux qui répondront !
--
Hoffmann Nicolas
Site perso : http://dominique.hoffmann.free.fr
On peut manipuler certaines variables [super] globales, comme celle de session par exemple : $_SESSION['id'] = 2; On ne peut pas le faire avec $_COOKIE car, à l'inverse de setcookie(), on n'envoie pas alors un header au client (qui lui écrit le cookie).
Ca je le sais bien, mais c'est ça qui ne m'a pas paru clair dans le contexte (suppression de cookies) : <cite auteur="Davel_x"> un simple $COOKIE['truc']= $mavariableamettredanslecookie serait valide et plus simple je pense </cite>
foreach ($COOKIE as $nom) { setcookie($nom); unset($COOKIE[$nom]); } Comme ça le cookie a disparu au niveau du client *et* du serveur et on ne risque plus de cafouillage.
A moins d'avoir sauté une page (!) il n'y a pas de cookie au niveau du serveur (ce n'est pas une session). Sinon, les 2 instructions font double emploi : setcookie est approprié (avec $_COOKIE et son underscore). Voici ce qui fonctionne *vraiment* :
<couic/>
Ces instructions ne font pas double emploi, et je me suis mal exprimé en parlant du côté serveur. Je voulais dire qu'on efface ainsi toute *trace* du cookie côté serveur (dans le tableau $_COOKIE) :
1) Le navigateur appelle la page PHP. Il profite pour envoyer les valeurs de cookie stockées. 2) PHP reçoit les infos et commence à traiter. Il stocke les valeurs de cookie dans $_COOKIE. 3) Si PHP doit supprimer un cookie, on commence par un setcookie('truc') sans valeur. PHP crée alors les entêtes à envoyer au client pour lui dire de supprimer le cookie.
4) A ce moment, si on doit considérer le cookie comme effacé, se pose le problème de la présence de sa valeur dans $_COOKIE. La suite du script pourrait éventuellement traiter un cookie dont on vient de demander l'effacement.
5) Pour celà on fait un unset sur $_COOKIE, pour faire disparaitre toute trace du cookie côté serveur. Ca limite alors les risques d'erreur. 6) Le serveur envoie les en-têtes qui demandent la supression du cookie au client. 7) Le reste de la page suit.
Voilà. J'espère avoir été plus clair cette fois ;-) Et j'en ai profité pour rajouté l'unserscore de $_COOKIE, que j'avais oublié... :p
Amicalement, -- Mister Jack (MJ) "Linux c'est pas pour les manchots !" Un don pour les victimes du Tsunami : http://www.croix-rouge.fr/
Salut !
Peter Pan a écrit :
Mister Jack a écrit :
Là j'ai pas compris, désolé.
On peut manipuler certaines variables [super] globales, comme celle de
session par exemple : $_SESSION['id'] = 2;
On ne peut pas le faire avec $_COOKIE car, à l'inverse de setcookie(),
on n'envoie pas alors un header au client (qui lui écrit le cookie).
Ca je le sais bien, mais c'est ça qui ne m'a pas paru clair dans le
contexte (suppression de cookies) :
<cite auteur="Davel_x">
un simple $COOKIE['truc']= $mavariableamettredanslecookie
serait valide et plus simple je pense
</cite>
foreach ($COOKIE as $nom)
{
setcookie($nom);
unset($COOKIE[$nom]);
}
Comme ça le cookie a disparu au niveau du client *et* du serveur et on
ne risque plus de cafouillage.
A moins d'avoir sauté une page (!) il n'y a pas de cookie au niveau du
serveur (ce n'est pas une session). Sinon, les 2 instructions font
double emploi : setcookie est approprié (avec $_COOKIE et son
underscore). Voici ce qui fonctionne *vraiment* :
<couic/>
Ces instructions ne font pas double emploi, et je me suis mal exprimé en
parlant du côté serveur. Je voulais dire qu'on efface ainsi toute
*trace* du cookie côté serveur (dans le tableau $_COOKIE) :
1) Le navigateur appelle la page PHP. Il profite pour envoyer les
valeurs de cookie stockées.
2) PHP reçoit les infos et commence à traiter. Il stocke les valeurs de
cookie dans $_COOKIE.
3) Si PHP doit supprimer un cookie, on commence par un setcookie('truc')
sans valeur. PHP crée alors les entêtes à envoyer au client pour lui
dire de supprimer le cookie.
4) A ce moment, si on doit considérer le cookie comme effacé, se pose le
problème de la présence de sa valeur dans $_COOKIE. La suite du script
pourrait éventuellement traiter un cookie dont on vient de demander
l'effacement.
5) Pour celà on fait un unset sur $_COOKIE, pour faire disparaitre toute
trace du cookie côté serveur. Ca limite alors les risques d'erreur.
6) Le serveur envoie les en-têtes qui demandent la supression du cookie
au client.
7) Le reste de la page suit.
Voilà. J'espère avoir été plus clair cette fois ;-)
Et j'en ai profité pour rajouté l'unserscore de $_COOKIE, que j'avais
oublié... :p
Amicalement,
--
Mister Jack (MJ)
"Linux c'est pas pour les manchots !"
Un don pour les victimes du Tsunami : http://www.croix-rouge.fr/
On peut manipuler certaines variables [super] globales, comme celle de session par exemple : $_SESSION['id'] = 2; On ne peut pas le faire avec $_COOKIE car, à l'inverse de setcookie(), on n'envoie pas alors un header au client (qui lui écrit le cookie).
Ca je le sais bien, mais c'est ça qui ne m'a pas paru clair dans le contexte (suppression de cookies) : <cite auteur="Davel_x"> un simple $COOKIE['truc']= $mavariableamettredanslecookie serait valide et plus simple je pense </cite>
foreach ($COOKIE as $nom) { setcookie($nom); unset($COOKIE[$nom]); } Comme ça le cookie a disparu au niveau du client *et* du serveur et on ne risque plus de cafouillage.
A moins d'avoir sauté une page (!) il n'y a pas de cookie au niveau du serveur (ce n'est pas une session). Sinon, les 2 instructions font double emploi : setcookie est approprié (avec $_COOKIE et son underscore). Voici ce qui fonctionne *vraiment* :
<couic/>
Ces instructions ne font pas double emploi, et je me suis mal exprimé en parlant du côté serveur. Je voulais dire qu'on efface ainsi toute *trace* du cookie côté serveur (dans le tableau $_COOKIE) :
1) Le navigateur appelle la page PHP. Il profite pour envoyer les valeurs de cookie stockées. 2) PHP reçoit les infos et commence à traiter. Il stocke les valeurs de cookie dans $_COOKIE. 3) Si PHP doit supprimer un cookie, on commence par un setcookie('truc') sans valeur. PHP crée alors les entêtes à envoyer au client pour lui dire de supprimer le cookie.
4) A ce moment, si on doit considérer le cookie comme effacé, se pose le problème de la présence de sa valeur dans $_COOKIE. La suite du script pourrait éventuellement traiter un cookie dont on vient de demander l'effacement.
5) Pour celà on fait un unset sur $_COOKIE, pour faire disparaitre toute trace du cookie côté serveur. Ca limite alors les risques d'erreur. 6) Le serveur envoie les en-têtes qui demandent la supression du cookie au client. 7) Le reste de la page suit.
Voilà. J'espère avoir été plus clair cette fois ;-) Et j'en ai profité pour rajouté l'unserscore de $_COOKIE, que j'avais oublié... :p
Amicalement, -- Mister Jack (MJ) "Linux c'est pas pour les manchots !" Un don pour les victimes du Tsunami : http://www.croix-rouge.fr/
Peter Pan
Mister Jack a écrit :
Ces instructions ne font pas double emploi, et je me suis mal exprimé en parlant du côté serveur. Je voulais dire qu'on efface ainsi toute *trace* du cookie côté serveur (dans le tableau $_COOKIE) [...]
C'est là où tu te fourvoies : le serveur n'a aucune autre mémoire, d'une page à l'autre, que le cookie ou une session PHP (qui est un cookie côté serveur). Tu supprimes la valeur d'une clef via setcookie() et au prochain chargement cette clef est vide dans $_COOKIE !
L'instruction unset() n'a d'utilité que dans le déroulement d'un script, script qui se termine au moment où la traduction HTML de la page est envoyée au navigateur (le serveur à ce moment ignore l'existence de tes variables). Mais, dans la mesure où setcookie() est traité avant tout autre envoi au brouteur, le tableau $_COOKIE est implémenté en fonction du dit cookie... vide !
Bref, setcookie() n'est pas fait pour les chiens et la boucle qui doit éventuellement effacer toutes les valeurs du cookie (mais pas les clefs) doit traiter la clef ET la valeur, cette dernière étant ignorée dans l'instruction. Testé et approuvé ;-)
-- Pierre http://www.1966.fr/
Mister Jack a écrit :
Ces instructions ne font pas double emploi, et je me suis mal exprimé en
parlant du côté serveur. Je voulais dire qu'on efface ainsi toute
*trace* du cookie côté serveur (dans le tableau $_COOKIE) [...]
C'est là où tu te fourvoies : le serveur n'a aucune autre mémoire, d'une
page à l'autre, que le cookie ou une session PHP (qui est un cookie côté
serveur). Tu supprimes la valeur d'une clef via setcookie() et au
prochain chargement cette clef est vide dans $_COOKIE !
L'instruction unset() n'a d'utilité que dans le déroulement d'un script,
script qui se termine au moment où la traduction HTML de la page est
envoyée au navigateur (le serveur à ce moment ignore l'existence de tes
variables). Mais, dans la mesure où setcookie() est traité avant tout
autre envoi au brouteur, le tableau $_COOKIE est implémenté en fonction
du dit cookie... vide !
Bref, setcookie() n'est pas fait pour les chiens et la boucle qui doit
éventuellement effacer toutes les valeurs du cookie (mais pas les clefs)
doit traiter la clef ET la valeur, cette dernière étant ignorée dans
l'instruction. Testé et approuvé ;-)
Ces instructions ne font pas double emploi, et je me suis mal exprimé en parlant du côté serveur. Je voulais dire qu'on efface ainsi toute *trace* du cookie côté serveur (dans le tableau $_COOKIE) [...]
C'est là où tu te fourvoies : le serveur n'a aucune autre mémoire, d'une page à l'autre, que le cookie ou une session PHP (qui est un cookie côté serveur). Tu supprimes la valeur d'une clef via setcookie() et au prochain chargement cette clef est vide dans $_COOKIE !
L'instruction unset() n'a d'utilité que dans le déroulement d'un script, script qui se termine au moment où la traduction HTML de la page est envoyée au navigateur (le serveur à ce moment ignore l'existence de tes variables). Mais, dans la mesure où setcookie() est traité avant tout autre envoi au brouteur, le tableau $_COOKIE est implémenté en fonction du dit cookie... vide !
Bref, setcookie() n'est pas fait pour les chiens et la boucle qui doit éventuellement effacer toutes les valeurs du cookie (mais pas les clefs) doit traiter la clef ET la valeur, cette dernière étant ignorée dans l'instruction. Testé et approuvé ;-)