Tableaux dans les cookies PHP

Comment stocker correctement un tableau dans un cookie? en PHP Exemple de Code:

$number_ticket=2;
$info[7][5]=1;
$info[8][5]=1;
52
demandé sur Marty Aghajanyan 2012-01-27 14:37:12

8 réponses

Sérialiser des données:

setcookie('cookie', serialize($info), time()+3600);

Puis unserialize de données:

$data = unserialize($_COOKIE['cookie']);

après data, $info et $data auront le même contenu.

65
répondu Narcis Radu 2013-04-02 18:31:58

pour stocker les valeurs du tableau dans le cookie, vous devez d'abord les convertir en chaîne, donc voici quelques options.

stocker des cookies comme JSON

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 bon choisir aussi si vous avez besoin de lire cookie en début de page avec JavaScript.

en fait, vous pouvez utiliser n'importe quel groupe de méthodes encrypt_array_to_string / decrypt_array_from_string qui convertira array en string et convertira string de nouveau en même array. Par exemple, vous pouvez également utiliser explode / implode pour le tableau des entiers.

Attention: Ne pas utiliser serialize / unserialize

De PHP.net

enter image description here

Do not pass untrusted user input to unserialize(). - Tout ce qui vient par HTTP y compris les cookies est non fiable!

références relatives à la sécurité

comme solution alternative, vous pouvez le faire aussi sans convertir array en string.

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 la suivante

echo '<pre>';
print_r( $_COOKIE );
die();
Array
(   
    [my_array] => Array
        (
            [0] => value1
            [1] => value2
            [2] => value3
        )

)

cette fonctionnalité est documentée en PHP.

À Partir 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.

81
répondu Marty Aghajanyan 2017-03-17 13:14:46

utiliser serialize et unserialize sur les cookies est un risque de sécurité. Les utilisateurs (ou les attaquants) peuvent modifier les données du cookie, puis quand vous le désérialisez, il pourrait exécuter du code PHP sur votre serveur. Les données de Cookie ne doivent pas être fiables. Utilisez JSON à la place!

du site de PHPs...

ne pas transmettre les données non fiables de l'utilisateur à unserialize(). Unserialization peut entraîner le chargement et l'exécution du code en raison de l'instanciation de l'objet et de l'autoloading, et un utilisateur malveillant peut être en mesure de l'exploiter. Utilisez un format sûr et standard d'échange de données comme JSON (via json_decode () et json_encode ()) si vous avez besoin de passer des données sérialisées à l'utilisateur.

13
répondu Nathan 2013-11-05 15:44:07

Essayer serialize() . Il convertit un tableau en format chaîne, vous pouvez alors utiliser unserialize() pour le convertir de nouveau en tableau. Des Scripts comme WordPress l'utilisent pour sauver des valeurs multiples à 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.

6
répondu Dunhamzzz 2012-01-27 10:40:25

Cookies sont essentiellement du texte, de sorte que vous pouvez stocker un tableau en l'encodant comme une chaîne JSON (voir json_encode ). Être conscient qu'il ya une limite sur la longueur de la chaîne que vous pouvez stocker.

5
répondu Rob Agar 2012-01-27 10:39:51

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 séparés sont stockés sur le système de l'utilisateur. Utilisez explode() pour définir un cookie avec plusieurs noms et les valeurs. Il n'est pas recommandé d'utiliser serialize() à cette fin, car cela peut entraîner des trous de sécurité. Regardez setcookie fonction PHP pour plus de détails

2
répondu Elzo Valugi 2015-08-06 18:23:38

récemment, j'ai créé ce code pour mon client, j'utilise tableau pour cookie dans ce code, en fait ce code est récemment consulté les pages par l'utilisateur en utilisant des cookies, espérons qu'il vous aide...!

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>";
} 
}
1
répondu Shakeel Memon 2015-12-14 20:10:55

vient de trouver la chose nécessaire. Maintenant, je peux stocker les produits visités sur les cookies et les Montrer plus tard quand 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";
    }
}
0
répondu Võ Minh 2018-09-07 15:13:01