Wie kann ein Array in einem Cookie ordnungsgemäß gespeichert werden? in PHP Codebeispiel:
$number_ticket=2;
$info[7][5]=1;
$info[8][5]=1;
Daten serialisieren:
setcookie('cookie', serialize($info), time()+3600);
Dann Daten desialisieren:
$data = unserialize($_COOKIE['cookie'], ["allowed_classes" => false]);
Nach den Daten haben $ info und $ data den gleichen Inhalt.
Um die Array-Werte in einem Cookie zu speichern, müssen Sie sie zuerst in einen String konvertieren. Hier sind einige Optionen.
Code speichern
setcookie('your_cookie_name', json_encode($info), time()+3600);
Code lesen
$data = json_decode($_COOKIE['your_cookie_name'], true);
JSON kann auch dann gut gewählt werden, wenn Sie ein gelesenes Cookie im Frontend mit JavaScript benötigen.
Tatsächlich können Sie eine beliebige encrypt_array_to_string
decrypt_array_from_string
-Methodengruppe verwenden, die Array in String und String zurück in konvertiert gleich array . Sie können beispielsweise auch explode
/implode
für ein Array von ganzen Zahlen verwenden.
Von PHP.net
Do not pass untrusted user input to unserialize().
- Alles, was über HTTP kommt, einschließlich Cookies, ist nicht vertrauenswürdig!
_/Referenzen in Bezug auf Sicherheit
setcookie('my_array[0]', 'value1' , time()+3600);
setcookie('my_array[1]', 'value2' , time()+3600);
setcookie('my_array[2]', 'value3' , time()+3600);
Und wenn Sie die $_COOKIE
-Variable drucken, werden Sie Folgendes sehen
echo '<pre>';
print_r( $_COOKIE );
die();
Array ( [My_array] => Array ( [0] => value1 [1] => value2 [2] => value3 ) )
Dies ist dokumentiert PHP.
Von 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.
Die Verwendung von serialisierten und unserialisierten Cookies ist ein Sicherheitsrisiko. Benutzer (oder Angreifer) können die Cookie-Daten ändern. Wenn Sie sie desialisieren, kann sie PHP Code auf Ihrem Server ausführen. Cookie-Daten sollten nicht vertrauenswürdig sein. Verwenden Sie stattdessen JSON!
Von der PHP-Site ...
Übergeben Sie nicht nicht vertrauenswürdige Benutzereingaben an unserialize (). Unsereialisierung kann dazu führen, dass Code aufgrund von Objekt-Instantiierung und automatischem Laden geladen und ausgeführt wird, und ein böswilliger Benutzer kann dies ausnutzen. Verwenden Sie ein sicheres, standardisiertes Datenaustauschformat wie JSON (über json_decode () und json_encode ()), wenn Sie serialisierte Daten an den Benutzer übergeben müssen.
Versuchen Sie serialize()
. Es konvertiert ein Array in ein String-Format. Sie können es dann mit unserialize()
in ein Array zurückwandeln. Skripts wie WordPress verwenden dies, um mehrere Werte in einem einzigen Datenbankfeld zu speichern.
Sie können auch json_encode()
verwenden, wie Rob sagte. Dies kann nützlich sein, wenn Sie den Cookie in Javascript lesen möchten.
Cookies sind im Wesentlichen Text. Sie können also ein Array speichern, indem Sie es als JSON-String kodieren (siehe json_encode
). Beachten Sie, dass die Länge der Zeichenfolge, die Sie speichern können, begrenzt ist.
Sie können auch versuchen, verschiedene Elemente in verschiedene Cookies zu schreiben. Cookies-Namen können als Array-Namen festgelegt werden und stehen Ihren PHP -Skripts als Arrays zur Verfügung, aber separate Cookies werden auf dem System des Benutzers gespeichert. Erwägen Sie explode (), um ein Cookie mit mehreren Namen und Werten zu setzen. Es wird nicht empfohlen, serialize () für diesen Zweck zu verwenden, da dies zu Sicherheitslücken führen kann. Weitere Informationen finden Sie in der Funktion setcookie PHP
vor kurzem habe ich diesen Code für meinen Kunden erstellt. Ich verwende Array für Cookies in diesem Code. Dieser Code erhält in letzter Zeit Seiten, die der Benutzer mit Cookies betrachtet.
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>";
}
}
Habe gerade das Ding gefunden. Jetzt kann ich besuchte Produkte auf Cookies speichern und sie später anzeigen, wenn sie wieder auf die Website gelangen.
// 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";
}
}