2010-05-30 5 views
0

J'ai testé cela sur mon ordinateur de développement, mais maintenant j'ai tout téléchargé sur le serveur de production et je ne peux pas lire la valeur du cookie.Cookie Valeur non disponible, pourquoi?

Je pense que le problème réside dans la sérialisation et la désérialisation.

if (isset($_COOKIE['watched_ads'])){ 
    $expir = time()+1728000; //20 days 
    $ad_arr = unserialize($_COOKIE['watched_ads']); // HERE IS THE PROBLEM 
    $arr_elem = count($ad_arr); 
    if (in_array($ad_id, $ad_arr) == FALSE){ 
     if ($arr_elem>10){ 
     array_shift($ad_arr); 
     } 
     $ad_arr[]=$ad_id; 
     setcookie('watched_ads', serialize($ad_arr), $expir, '/'); 
    } 
} 

Quand je fais écho à ceci: comptage (ad_arr de $) Je reçois le nr prévu, dans ce cas, donc il y a une valeur là. Mais quand je fais écho à la valeur: echo $ ad_arr [0]; Je n'ai rien. Complètement blank. Pas de texte du tout.

Quelqu'un a une idée?

si vous avez besoin de plus d'informations sur quelque chose laissez-moi savoir ...

Répondre

0

Il s'avère que c'était des stripslashes qui étaient nécessaires ici.

A fait un stripslashes() d'abord et il a travaillé désérialiser le cookie.

0

Vous devez comprendre que count rendements 1 pour la plupart des valeurs non-tableau, y compris une chaîne vide.

> php 
<?php 
echo count(""); 
^Z 
1 

Donc, pour le déboguer, essayez var_dump « ing la _COOKIE $ superglobale lui-même.

+0

ce qui est var_dumping? Dans firefox je peux voir le cookie et sa valeur est là ... –

+0

Non, utilisez la commande var_dump() en php pour sortir le contenu de $ _COOKIE. http://us2.php.net/var_dump – Eli

+0

J'ai ajouté le lien à la réponse ... – Artefacto

0

Je suppose que votre $ ad_arr n'est pas un tableau. Vous pouvez vérifier cela avec le « is_array() » fonction ou en appelant:

var_dump($ad_arr); 

Il Sould ont « tableau » dans la sortie et non « string » (comme Artefacto vient déjà mentionné).

Une autre petite astuce:

Si vous souhaitez enregistrer un tableau associatif, vous pouvez utiliser une JSON chaîne codée dont l'utilisation peut enregistrer à l'aide du json_encode() gunction:

setcookie('watched_ads', json_encode($ad_arr), $expir, '/'); 

et chargement des données vous pouvez utiliser la fonction inverse json_decode():

$ad_arr = json_decode($_COOKIE['watched_ads'], true); 

Ajout vrai comme deuxième paramter, vous obtiendrez un tableau associatif et non un objet. L'utilisation du format JSON est également une bonne idée pour sauvegarder des données complexes dans une base de données.

A et un dernier conseil: "in_array()" fonctionne aussi bien que "in_array() == FAUX"

Questions connexes