Delete de cookie en PHP

Delete de cookie en PHP - PHP - Programmation

Marsh Posté le 03-02-2006 à 15:41:10    

Bonjour a tous ^^
 
Bon je suppose que c un sujet qui reviens souvent, mais là j'avoue ke je trouve ca completement illogique, mon histoire lol.
 
Voila g devellopé une zone client en PHP, avec inscription, et authentification.
Jusque la pas de probleme: le script recupere les info dans MySQL, et crée un cookie de session, la session est open:

Code :
  1. setcookie("session_id", $session_id, time()+3600);


 
Maintenant j'en suis a la création de l'option de logout, cad du delete du cookie.
Ho bien sur, je vois d'ici les ptis malins me repondre:

Code :
  1. setcookie("session_id" );


ou

Code :
  1. setcookie("session_id", "",0);


 
...car c gneralement ce qu'on fait pour delete un cookie lol.
Eh bien non, ca marche pas, c la raison de mon poste ici   :ange:  
 
Alors il faut savoir que ma zone client est codée orientée objet (sous forme de module, en include sur la page index)
...on aurait put penser que ca viens de là; d'une variable mal traitée dans un module tiers; mais non:
ma procedure de delete du cookie est au tout debut de la page index.php:
 

Code :
  1. $module= $_GET['module'];
  2. if ($module == "4" )
  3. {
  4. setcookie("session_id", "", 0);
  5. $session_id = $HTTP_COOKIE_VARS[ "session_id"];
  6. echo $session_id;
  7. }


 
 
... et la comble de la torture cérébrale, le echo renvois la valeur du cookie, comme si la ligne

Code :
  1. setcookie("session_id", "", 0);


...n'etait pas du tout interprétée...
 
Enfin, a tout hasard, g testé avec mes deux navigateur: Mozilla et IE, et le pb est le meme :(
...un volontaire, pour s'arracher les cheveux avec moi  ?  ^^
 
 
Merci d'avance.
 


---------------
http://www.freelance-project.org
Reply

Marsh Posté le 03-02-2006 à 15:41:10   

Reply

Marsh Posté le 03-02-2006 à 15:44:32    

http://fr2.php.net/manual/fr/funct [...] p#AEN58035
Pour effacer un cookie, il suffit de lui mettre une duree de vie negative :)

Reply

Marsh Posté le 03-02-2006 à 15:47:48    

ou une valeur vide :)

Reply

Marsh Posté le 03-02-2006 à 15:51:18    

non, pas une valeur vide sinon le cookie n'expire qu'a la fin de la session, ca ne le supprime pas immediatement

Reply

Marsh Posté le 03-02-2006 à 16:02:26    

unset ( $_COOKIE['nom_du_cookie'] ); ??

Reply

Marsh Posté le 03-02-2006 à 16:06:36    

Ce n'est pas bien la durée de vie négative ? Ca ne fait pas pro ?

Reply

Marsh Posté le 03-02-2006 à 16:10:56    

tout ce qu'il faut c'est que ca soit efficace...
teste, vois lequel te convient le mieux, car pour moi c'est unset() le mieux...
 
En voyant le code tu sait tout de suite que tu detruis la variable, alors qu'en modifiant la durée il faut porter une attention supplémentaire a ta lign de code.
 
Apres c au feeling ;)

Reply

Marsh Posté le 03-02-2006 à 16:13:59    

lol bon alors je viens de test les 2 methodes :
 
if ($module == "4" )
{
setcookie("session_id", "", time() - 3600);
$session_id = $HTTP_COOKIE_VARS[ "session_id"];
echo $session_id;
 
unset ( $_COOKIE['session_id'] );  
$session_id = $HTTP_COOKIE_VARS[ "session_id"];
echo $session_id;
}
 
...et les 2 echo me renvoie la valeur originelle du cookie ...
/me cherche une corde pour se pendre :(


---------------
http://www.freelance-project.org
Reply

Marsh Posté le 03-02-2006 à 16:39:30    

le tableau $HTTP_COOKIE_VARS n'est tout simplement modifier ni par setcookie (qui ne fait qu'envoyer au navigateur sans rien modifier d'autre) ni par le unset que tu fais sur une autre variable tableau contenant les même informations.
 
Si tu utilises $HTTP_COOKIE_VARS il faut que tu fasses un setcookie pour effacer la valeur dans le cookie du navigateur et un unset sur $HTTP_COOKIE_VARS. Si tu utilises $_COOKIE alors le unset est censé sufire.
 
En tout cas, si on utilise une de ces deux variables, il faut s'y tenir partout et ne pas utiliser un coup l'un et un coup l'autre.


Message édité par omega2 le 03-02-2006 à 16:39:57
Reply

Marsh Posté le 03-02-2006 à 16:50:08    

on en reviens donc a ce que je disais :o

Reply

Marsh Posté le 03-02-2006 à 16:50:08   

Reply

Marsh Posté le 03-02-2006 à 17:04:05    

2Spartiate a écrit :

lol bon alors je viens de test les 2 methodes :
 
if ($module == "4" )
{
setcookie("session_id", "", time() - 3600);
$session_id = $HTTP_COOKIE_VARS[ "session_id"];
echo $session_id;
 
unset ( $_COOKIE['session_id'] );  
$session_id = $HTTP_COOKIE_VARS[ "session_id"];
echo $session_id;
}
 
...et les 2 echo me renvoie la valeur originelle du cookie ...
/me cherche une corde pour se pendre :(


C'est normal, les cookies sont chargés en mémoire, la suppression ne prendra effet qu'au prochain rechargement.
Et comme le dit omega2 tu fais un unset sur $_COOKIE puis tu testes $HTTP_COOKIE_VARS

Reply

Marsh Posté le 03-02-2006 à 18:54:47    

Merci a vous ! ^^
 
Le probleme est résolu, en effet en y reflechissant, c klr que le navigateur avait gardé le cookie en mémoire.
Cepandant, avec la methode unset(), sur le meme tableau $HTTP_COOKIE_VARS, permet d'eviter de recharger la page, ce que ne permet pas visiblement l'autre methode.
 
... un point the_bigboo et les partisans du unset()
La balle au centre, merci a vous ^^


---------------
http://www.freelance-project.org
Reply

Marsh Posté le 03-02-2006 à 19:24:36    

2Spartiate a écrit :

... un point the_bigboo et les partisans du unset()
La balle au centre, merci a vous ^^


 :kaola: [:aless]  :fou:  :(  :cry:  :cry:  :cry:  :cry:  :cry:  

Reply

Marsh Posté le 03-02-2006 à 19:37:00    

ben je sais pas , on cherche a effacer une variable , c'est la seule fonction d'unset()
 
tu la vois dans ton code tu sais tout de suite ce que ca fait... alors que donner un autre parametre au cookie c plus chiant, et ca t'oblige a regarder ton code plus en détail...
 
La meilleure option etant d'utiliser unset() et d'avoir un code bien commenté.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed