Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Suppression de cookies

12 réponses
Avatar
nico3333fr(at)free.fr
Bonjour à tous,

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

10 réponses

1 2
Avatar
Mister Jack
Salut !

nico3333fr(at)free.fr a écrit :
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éé.



L'ensemble des cookies est stocké dans le tableau $COOKIE[].
Pour supprimer un cookie, il suffit de faire setcookie('truc').
Il suffit donc pour chaque élément $COOKIE['truc'] du tableau de faire
un setcookie('truc').

Lire la page 'setcookie' du manuel de PHP :
http://de3.php.net/manual/fr/function.setcookie.php

En gros, une fonction delete_all_cookie_from_ze_domaine ! ;-)
Si ça existe...



Donc en gros un truc du genre :

<?php
// Fonction de suppression des cookies du domaine.
function delete_all_cookie_from_ze_domaine ()
{
foreach ($COOKIE as $nom)
{
setcookie($nom);
}
}
?>

Amicalement,
--
Mister Jack (MJ)
"Linux c'est pas pour les manchots !"
Un don pour les victimes du Tsunami : http://www.croix-rouge.fr/
Avatar
Peter Pan
nico3333fr(at)free.fr a écrit :
En gros, une fonction delete_all_cookie_from_ze_domaine ! ;-)
Si ça existe...



La section sur http://fr2.php.net/manual/fr/function.setcookie.php dit :

" Les cookies doivent être effacés avec les mêmes paramètres que ceux
utilisés lors de leur création. Si l'argument value est une chaîne vide
("") et quelques autres arguments sont exactements les mêmes que lors du
positionnement du cookie, alors le cookie sera effacé du client."

Sinon je tenterais bien $_COOKIE = array();

--
Pierre
http://www.1966.fr/
Avatar
Davel_x
Mister Jack ecrivait :
Il suffit donc pour chaque élément $COOKIE['truc'] du tableau de faire
un setcookie('truc').

Lire la page 'setcookie' du manuel de PHP :
http://de3.php.net/manual/fr/function.setcookie.php



un simple $COOKIE['truc']= $mavariableamettredanslecookie
serait valide et plus simple je pense :)


<?php
// Fonction de suppression des cookies du domaine.
function delete_all_cookie_from_ze_domaine ()
{
foreach ($COOKIE as $nom)
{
setcookie($nom);
}
}
?>



ou bien :
foreach ($COOKIE as &$nom) {
unset($nom);
}

--
**davel**
http://www.lerpg.com
Avatar
Mister Jack
Salut !

Davel_x a écrit :
Mister Jack ecrivait :
Il suffit donc pour chaque élément $COOKIE['truc'] du tableau de faire
un setcookie('truc').
Lire la page 'setcookie' du manuel de PHP :
http://de3.php.net/manual/fr/function.setcookie.php



un simple $COOKIE['truc']= $mavariableamettredanslecookie
serait valide et plus simple je pense :)



Là j'ai pas compris, désolé.

<?php
// Fonction de suppression des cookies du domaine.
function delete_all_cookie_from_ze_domaine ()
{
foreach ($COOKIE as $nom)
{
setcookie($nom);
}
}
?>



ou bien :
foreach ($COOKIE as &$nom) {
unset($nom);
}



Là, je ne suis pas d'accord.
Faire un unset supprime la valeur au niveau du serveur, mais le cookie
reste chez l'utilisateur. Donc le navigateur renverra le cookie à la
prochine page.
Une bonne solution afin d'éviter les problèmes de gestion de cookie
serait donc :

function delete_all_cookie_from_ze_domaine ()
{
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.

Cordialement,
--
Mister Jack (MJ)
"Linux c'est pas pour les manchots !"
Un don pour les victimes du Tsunami : http://www.croix-rouge.fr/
Avatar
Peter Pan
Davel_x a écrit :
Mister Jack ecrivait :
Lire la page 'setcookie' du manuel de PHP :
http://de3.php.net/manual/fr/function.setcookie.php



un simple $COOKIE['truc']= $mavariableamettredanslecookie
serait valide et plus simple je pense :)



Tu n'as pas lu la page proposée par MJ ou moi (ce n'est pas plus simple,
ni plus valide).

ou bien :
foreach ($COOKIE as &$nom) {
unset($nom);
}



On écrit $_COOKIE et setcookie($nom) est approprié :-)

Comme je le dis plus haut, $_COOKIE = array(); me semblait encore plus
rapide. Mais j'écris à l'imparfait car ça ne fonctionne pas chez moi
après test, ni même les boucles foreach()

--
Pierre
http://www.1966.fr/
Avatar
Davel_x
Peter Pan ecrivait :
Davel_x a écrit :

Mister Jack ecrivait :

Lire la page 'setcookie' du manuel de PHP :
http://de3.php.net/manual/fr/function.setcookie.php






un simple $COOKIE['truc']= $mavariableamettredanslecookie
serait valide et plus simple je pense :)


Tu n'as pas lu la page proposée par MJ ou moi (ce n'est pas plus simple,
ni plus valide).



Je n'ai pas dit plus valide :)
Par contre pour la simplicité, je pense qu'il est mieux de considérer
$_COOKIE comme un tableau lambda et de travailler avec comme tel. Mais
toutes les méthodes sont valides, je ne faisait que présenter la mienne :)

ou bien :
foreach ($COOKIE as &$nom) {
unset($nom);
}




On écrit $_COOKIE et setcookie($nom) est approprié :-)



effectivement j'ai fait une erreur de copier-coller, sorry =)
pour le setcookie, ne faut il pas bien vérifier que $nom est vide et/ou
inexistant avant ?
à ce moment le cookie vaut une valeur vide ou bien n'existe-t-il tout
simplement plus ?

Comme je le dis plus haut, $_COOKIE = array(); me semblait encore plus
rapide.



Je suis d'accord

--
**davel**
Avatar
Davel_x
Mister Jack ecrivait :
un simple $COOKIE['truc']= $mavariableamettredanslecookie
serait valide et plus simple je pense :)




Là j'ai pas compris, désolé.



En fait je préfère, de manière personnelle, travailler avec cette
variable globale comme avec les autres, c'est à dire en la considérant
comme un tableau, c'est à mon sens plus simple d'avoir toujours des
méthodes identiques pour traiter ces données. Mais ça reste un avis perso.

foreach ($COOKIE as &$nom) {
unset($nom);
}




Là, je ne suis pas d'accord.
Faire un unset supprime la valeur au niveau du serveur, mais le cookie
reste chez l'utilisateur. Donc le navigateur renverra le cookie à la
prochine page.



Euh... Je n'ai jamais vu de trucs comme ça arriver, tu es sur de ça ?
Des cookies sur le serveur ? hmm.. je vais me renseigner sur ce truc ^^

--
**davel**
Avatar
Peter Pan
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).

Faire un unset supprime la valeur au niveau du serveur, mais le cookie
reste chez l'utilisateur. Donc le navigateur renverra le cookie à la
prochine page.



C'est bien pour ça que unset() n'a pas plus de sens qu'attribuer une
valeur vide à $_COOKIE ; d'où mon "je tenterais bien" initial avant
d'avoir essayé :-)

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* :

foreach($_COOKIE as $key => $value)
setcookie($key);

--
Pierre
http://www.1966.fr/
Avatar
Peter Pan
Davel_x a écrit :
Je n'ai pas dit plus valide :)



Tu as dit "serait valide et plus simple" :-)

Par contre pour la simplicité, je pense qu'il est mieux de considérer
$_COOKIE comme un tableau lambda et de travailler avec comme tel. Mais
toutes les méthodes sont valides, je ne faisait que présenter la mienne :)



Travailler avec le tableau pour le *lire* oui.

effectivement j'ai fait une erreur de copier-coller, sorry =)



Je ne sais pas ce que tu as copié, mais ça n'a jamais dû fonctionner :-)

pour le setcookie, ne faut il pas bien vérifier que $nom est vide et/ou
inexistant avant ?



Tu écris un cookie dont la valeur d'une clef est vide, qu'il ait existé
ou pas.

à ce moment le cookie vaut une valeur vide ou bien n'existe-t-il tout
simplement plus ?



Il existe sans valeur.

Je suis d'accord



Et bien tu as tort d'être d'accord avec moi :-)
Cf. ma réponse de 20h02.

--
Pierre
http://www.1966.fr/
Avatar
Mister Jack
Salut !

Davel_x a écrit :
Mister Jack ecrivait :
Là, je ne suis pas d'accord.
Faire un unset supprime la valeur au niveau du serveur, mais le cookie
reste chez l'utilisateur. Donc le navigateur renverra le cookie à la
prochine page.



Euh... Je n'ai jamais vu de trucs comme ça arriver, tu es sur de ça ?
Des cookies sur le serveur ? hmm.. je vais me renseigner sur ce truc ^^



J'ai pas été très clair je crois. Le tableau $_COOKIE contient
l'ensemble des valeurs de cookie. C'est un tableau en lecture seule.
Il contient les valeurs de cookie que le client (navigateur) a renvoyé à
l'appel de la page.
Pour créer, modifier, ou supprimer un cookie chez le client il faut
utiliser setcookie().

Quand on fait setcookie('truc') on supprime le cookie chez le client,
mais sans rechargement de page le tableau $_COOKIE en contient encore la
trace, ce qui amène un risque d'erreur plus élevé si un script fait
joujou avec les cookies par la suite.
D'où l'intérêt de faire un unset sur $_COOKIE pour que côté serveur on
sache bien que le cookie n'est plus là.
Les deux systèmes sont complémentaires, car faire seulement un unset ne
va pas effacer le cookie chez le client, qui le renverra à l'appel de
page suivant.

Cordialement,
--
Mister Jack (MJ)
"Linux c'est pas pour les manchots !"
Un don pour les victimes du Tsunami : http://www.croix-rouge.fr/
1 2