Comment est la bonne façon de stocker un tableau dans un cookie? en PHP Exemple de code:
$number_ticket=2;
$info[7][5]=1;
$info[8][5]=1;
Sérialiser les données:
setcookie('cookie', serialize($info), time()+3600);
Puis désérialiser les données:
$data = unserialize($_COOKIE['cookie'], ["allowed_classes" => false]);
Après data, $ info et $ data auront le même contenu.
Pour stocker les valeurs du tableau dans un cookie, vous devez d’abord les convertir en chaîne. Voici quelques options.
Code de stockage
setcookie('your_cookie_name', json_encode($info), time()+3600);
Code de lecture
$data = json_decode($_COOKIE['your_cookie_name'], true);
JSON peut être utile aussi si vous avez besoin de lire un cookie avec JavaScript.
En fait, vous pouvez utiliser n’importe quel groupe de méthodes encrypt_array_to_string
decrypt_array_from_string
qui convertira un tableau en chaîne et reconvertira chaîne en même array . Par exemple, vous pouvez également utiliser explode
/implode
pour un tableau d'entiers.
De PHP.net
Do not pass untrusted user input to unserialize().
- Tout ce qui arrive par HTTP, y compris les cookies, n'est pas fiable!
_/Références relatives à la sécurité
setcookie('my_array[0]', 'value1' , time()+3600);
setcookie('my_array[1]', 'value2' , time()+3600);
setcookie('my_array[2]', 'value3' , time()+3600);
Et après, si vous imprimez la variable $_COOKIE
, vous verrez ce qui suit
echo '<pre>';
print_r( $_COOKIE );
die();
Tableau ( [My_array] => Tableau ( [0] => valeur1 [1] => valeur2 [2] => valeur3 ) )
Ceci est documenté PHP.
De PHP.net
Cookies names can be set as array names and will be available to your PHP scripts as arrays but separate cookies are stored on the user's system.
L'utilisation de la sérialisation et de la désérialisation sur les cookies constitue un risque pour la sécurité. Les utilisateurs (ou les attaquants) peuvent modifier les données des cookies. Lorsque vous les désérialisez, ils peuvent exécuter du code PHP sur votre serveur. Les données des cookies ne doivent pas être approuvées. Utilisez JSON à la place!
Du site PHP ...
Ne transmettez pas les entrées utilisateur non fiables à unserialize (). La désérialisation peut entraîner le chargement et l'exécution du code en raison de l'instanciation et du chargement automatique des objets. Un utilisateur malveillant peut alors l'exploiter. Utilisez un format d'échange de données standard sûr, tel que JSON (via json_decode () et json_encode ()) si vous devez transmettre des données sérialisées à l'utilisateur.
Essayez serialize()
. Il convertit un tableau en format chaîne, vous pouvez ensuite utiliser unserialize()
pour le reconvertir en tableau. Les scripts tels que WordPress utilisent cela pour enregistrer plusieurs valeurs dans un seul champ de base de données.
Vous pouvez également utiliser json_encode()
comme Rob l'a dit, ce qui peut être utile si vous voulez lire le cookie en javascript.
Les cookies sont essentiellement du texte, vous pouvez donc stocker un tableau en l'encodant sous forme de chaîne JSON (voir json_encode
). Sachez qu'il existe une limite à la longueur de la chaîne que vous pouvez stocker.
Vous pouvez également essayer d'écrire différents éléments dans différents cookies. Les noms de cookies peuvent être définis en tant que noms de tableaux et seront disponibles pour vos scripts PHP en tant que tableaux, mais des cookies distincts sont stockés sur le système de l'utilisateur. Explodez () pour définir un cookie avec plusieurs noms et valeurs. Il n'est pas recommandé d'utiliser serialize () à cette fin, car cela peut entraîner des failles de sécurité. Regardez la fonction setcookie PHP pour plus de détails.
récemment, j'ai créé ce code pour mon client, j'utilise un tableau pour les cookies dans ce code. En fait, ce code reçoit les pages récemment consultées par l'utilisateur à l'aide de cookies. J'espère que cela vous aidera ...!
function curPageURL() { // get url
return 'http' . ((
!empty($_SERVER['HTTPS']) &&
$_SERVER['HTTPS'] !== 'off' ||
$_SERVER['SERVER_PORT'] == 443
) ? 's' : '') . '://' . $_SERVER['SERVER_NAME'] . (
$_SERVER['SERVER_PORT'] == 80 ? '' : $_SERVER['SERVER_PORT']
) . $_SERVER['REQUEST_URI'];
}
$currentPage = curPageURL(); // call function
$counter = $_COOKIE['_counter']; // set counter variable
if(!$_COOKIE['_PAGES']){ // if _Pages cookie
$default = 1; // set default value to 1
setcookie("_counter",$default,time()+7200); // set counter cookie
setcookie("_PAGES[$default]",$currentPage, time()+3600); // set cookie
}
else{ // if ! _Pages cookie
$default = $counter+1; // set default value to +1
setcookie("_counter",$default,time()+7200); // set counter cookie
}
if(@in_array($currentPage, @$_COOKIE['_PAGES'])){ // if same url found
}
else{ // if new url found
setcookie("_PAGES[$default]",$currentPage, time()+3600); // set cookie
}
if($_COOKIE['_PAGES']){
foreach ($_COOKIE['_PAGES'] as $value){
echo "<a href='{$value}'>{$value}</a>";
}
}
Je viens de trouver la chose nécessaire. Maintenant, je peux stocker les produits visités dans des cookies et les montrer plus tard lorsqu'ils reviennent sur le site.
// set the cookies
setcookie("product[cookiethree]", "cookiethree");
setcookie("product[cookietwo]", "cookietwo");
setcookie("product[cookieone]", "cookieone");
// after the page reloads, print them out
if (isset($_COOKIE['product'])) {
foreach ($_COOKIE['product'] as $name => $value) {
$name = htmlspecialchars($name);
$value = htmlspecialchars($value);
echo "$name : $value <br />\n";
}
}