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;
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.
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
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é
- http://php.net/manual/en/function.unserialize.php#refsect1-function.unserialize-notes
- https://www.owasp.org/index.php/PHP_Object_Injection
- https://websec.files.wordpress.com/2010/11/rips_ccs.pdf
- https://www.notsosecure.com/remote-code-execution-via-php-unserialize /
- https://www.alertlogic.com/blog/writing-exploits-for-exotic-bug-classes-unserialize () /
- https://hakre.wordpress.com/2013/02/10/php-autoload-invalid-classname-injection /
- https://security.stackexchange.com/questions/77549/is-php-unserialize-exploitable-without-any-interesting-methods
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.
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.
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.
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.
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
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>";
}
}
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";
}
}