it-swarm.com.de

Arrays in Cookies PHP

Wie kann ein Array in einem Cookie ordnungsgemäß gespeichert werden? in PHP Codebeispiel:

$number_ticket=2;
$info[7][5]=1;
$info[8][5]=1;
54
Paul Barrios

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.

67
Narcis Radu

Um die Array-Werte in einem Cookie zu speichern, müssen Sie sie zuerst in einen String konvertieren. Hier sind einige Optionen.

Cookies als JSON speichern

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_stringdecrypt_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.

Warnung: Verwenden Sie keine serialize/unserialize

Von PHP.net

 enter image description here

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

Alternativ können Sie das auch tun, ohne Array in String zu konvertieren.

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.

84

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.

13
Nathan

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.

6
Dunhamzzz

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. 

5
Rob Agar

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

2
Elzo Valugi

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>";
} 
}
1
Shakeel Memon

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";
    }
}
0
Võ Minh