2010-08-06 8 views
1

J'utilise les fonctions suivantes pour définir un tableau de valeurs dans un cookie en PHP, mais j'ai aussi besoin d'une fonction "ajouter" et "éditer" - des suggestions sur comment je peux faire cela?Comment ajouter/modifier un cookie en php?

function build_cookie($var_array) { 
    if (is_array($var_array)) { 
    foreach ($var_array as $index => $data) { 
     $out.= ($data!="") ? $index."=".$data."|" : ""; 
    } 
    } 
    return rtrim($out,"|"); 
} 

function break_cookie ($cookie_string) { 
    $array=explode("|",$cookie_string); 
    foreach ($array as $i=>$stuff) { 
    $stuff=explode("=",$stuff); 
    $array[$stuff[0]]=$stuff[1]; 
    unset($array[$i]); 
    } 
    return $array; 
} 

Utilisation:

setcookie("mycookies", build_cookie($cookies_array), time()+60*60*24*30); 

$cookies_array2 = break_cookie(urldecode($_COOKIE['mycookies'])); 

    foreach ($cookies_array2 as $k => $v) { 
     echo "$k : $v <br />\n"; 
    } 

Répondre

2

Une chose que vous devriez envisager d'utiliser est serialize et unserialize pour encoder vos données de cookie. Faites attention cependant, d'après mon expérience, vous devez utiliser stripslashes sur la valeur du cookie avant de le désérialiser. De cette façon, vous pouvez désérialiser les données, modifier les valeurs, resérialiser le cookie et l'envoyer à nouveau. Serialize vous facilitera la tâche si vous souhaitez stocker des types de données plus complexes.

par exemple:

setcookie("mycookies",serialize($cookies_array),time()+60*60*24*30); 

// This won't work until the next page reload, because $_COOKIE['mycookies'] 
// Will not be set until the headers are sent  
$cookie_data = unserialize(stripslashes($_COOKIE['mycookies'])); 
$cookie_data['foo'] = 'bar'; 
setcookie("mycookies",serialize($cookies_array),time()+60*60*24*30); 
+0

Cela semble plus simple! Btw, n'est-ce pas stripslashes(), pas strip_slashes()? – DrMHC

1

Je stockerait juste un identifiant dans le cookie et utiliser un fichier plat (ini, texte ou sérialisé simple) ou base de données pour stocker les valeurs. La chose est - biscuit sont sévèrement limitées dans l'espace et vous devriez ajouter le moins possible. Un de mes derniers projets, je devais stocker beaucoup d'informations et, comme j'avais accès aux lecteurs ssd, j'ai mis les tableaux et les objets sérialisés dans des fichiers zippés et dans les cookies, j'ai sauvé l'ID, puis quelques hashs de les données pour être en mesure de faire une validation rapide. Et, du point de vue de la sécurité, avoir juste un ID (et un hachage des données locales, donc on ne peut pas facilement changer l'ID ou une autre forme de vérification de cet ID) est plus sûr que de mettre le les données dans le cookie.

Avez-vous des raisons particulières de sauvegarder des données en tant que cookies?