[PHP] Cookie vide dans une fonction, complet juste avant ou après

Nouveau WRInaute
Bonsoir,

Je travaille actuellement sur un site immobilier où je souhaite stocker la recherche de l'internaute dans un Cookie afin qu'il n'ait pas à ré-entrer tous ses critères de recherche à chaque revisite du site.

Pour cela, j'utilise le code suivant pour mémoriser le Cookie :
Code:
$search_query = serialize($_POST);
setcookie('search_params', $search_query, time()+31536000, "/");

Puis pour lire le Cookie, j'utilise le code suivant :
Code:
$search_params = unserialize(stripslashes($_COOKIE['search_params']));

Enfin, lorsque je fais un var_dump($_COOKIE['search_params']), celui-ci retourne parfois un résultat vide alors que le Cookie existe bel et bien.

Par-exemple, lorsque je fais un var_dump(); juste avant une fonction, j'ai bien le contenu de mon Cookie qui s'affiche, alors que ce même var_dump() au sein de la fonction retourne un résultat vide ...

J'ai essayé en ajoutant un addslashes() avant de sérializer, j'ai essayé de jouer avec le Path et Domain dans la définition du Cookie mais rien n'est concluant.

Je ne comprends pas pourquoi mon Cookie peut être vide au sein d'une fonction...

Avez-vous déjà rencontré ce cas de figure ?

D'avance, merci pour votre retour.

pH
 
WRInaute accro
Pourquoi un stripslashes() ? Magic quotes activées ?
Résultat vide ? Mais qd même isset() ou juste empty() ?
 
WRInaute accro
Non plus, juste une piste. Un exemple de cookie sérializé ?
Dans le débogueur (F12), tu vois bien ce cookie non vide ?
Donc tu as bien ce cas de figure ? Les 2 à la suite de l'autre ?
PHP:
<span class="syntaxdefault"></span><span class="syntaxkeyword">echo&nbsp;</span><span class="syntaxdefault">$_COOKIE</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'search_params'</span><span class="syntaxkeyword">];&nbsp;</span><span class="syntaxcomment">//&nbsp;OK<br /><br /></span><span class="syntaxkeyword">function&nbsp;</span><span class="syntaxdefault">foobar</span><span class="syntaxkeyword">()<br />{<br />echo&nbsp;</span><span class="syntaxdefault">$_COOKIE</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'search_params'</span><span class="syntaxkeyword">];&nbsp;</span><span class="syntaxcomment">//&nbsp;KO<br /></span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">foobar</span><span class="syntaxkeyword">();&nbsp;</span><span class="syntaxdefault"></span>
 
Nouveau WRInaute
Bonjour à vous,

Après une bonne nuit de sommeil, j'ai trouvé ... Bug de débutant mais c'est toujours ceux-là qui sont les plus difficiles à trouver ...

Dans une portion de code qui me sert à géolocaliser l'internaute s'il n'a jamais cherché sur le site... :

Code:
if($_SERVER['GEOIP_CITY'] && (!isset($_COOKIE['search_params']) || $_COOKIE['search_params'] = '')) {

Je pense que vous n'allez pas avoir de mal à trouver :)

Merci pour votre coup de main en tout cas.

pH
 
WRInaute impliqué
Pierre-Henri a dit:
Code:
if($_SERVER['GEOIP_CITY'] && (!isset($_COOKIE['search_params']) || $_COOKIE['search_params'] = '')) {

Dans ce cas, autant utiliser empty, ça t'aurait même évité cette erreur ;)
PHP:
<span class="syntaxdefault"><br /></span><span class="syntaxkeyword">if(</span><span class="syntaxdefault">$_SERVER</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'GEOIP_CITY'</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">&&</span><span class="syntaxdefault"> empty</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_COOKIE</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'search_params'</span><span class="syntaxkeyword">]))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br />&nbsp;</span><span class="syntaxdefault"></span>

Et pour répondre à ta question, oui $_COOKIE est superglobal tout comme $_GET, $_POST, $_REQUEST, $_SESSION, et bien d'autre ;)
http://fr.php.net/manual/fr/language.variables.superglobals.php
 
Nouveau WRInaute
Merci Blount,

Oui, en effet, empty() est carrément adapté dans ce cas de figure... Mais je suis du genre "pourquoi faire simple quand on peut faire compliqué" ! :-D

Bonne journée.
pH
 
Discussions similaires
Haut