Pertanyaan Array dalam cookie PHP


Bagaimana cara yang tepat untuk menyimpan array di cookie? di PHP Contoh kode:

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

49
2018-01-27 10:37


asal


Jawaban:


Serialisasi data:

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

Kemudian data unserialize:

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

Setelah data, $ info dan $ data akan memiliki konten yang sama.


61
2018-01-27 10:42



Untuk menyimpan nilai larik dalam cookie, pertama-tama Anda perlu menggantinya menjadi string, jadi di sini ada beberapa opsi.

Menyimpan cookie sebagai JSON

Menyimpan kode

setcookie('your_cookie_name', json_encode($info), time()+3600);

Membaca kode

$data = json_decode($_COOKIE['your_cookie_name'], true);

JSON dapat memilih dengan baik jika Anda perlu membaca cookie di bagian depan dengan JavaScript.

Sebenarnya Anda bisa menggunakan apa saja encrypt_array_to_string/decrypt_array_from_string grup metode yang akan mengonversi larik ke string dan mengubah string kembali menjadi sama larik. Misalnya Anda juga bisa menggunakan explode/implode untuk susunan bilangan bulat.

Peringatan: Jangan gunakan serialize / unserialize

Dari PHP.net

enter image description here

Do not pass untrusted user input to unserialize(). - Apa pun yang datang dengan HTTP termasuk cookie tidak dipercaya!

Referensi terkait keamanan

Sebagai solusi alternatif, Anda dapat melakukannya juga tanpa mengubah array menjadi string.

setcookie('my_array[0]', 'value1' , time()+3600);
setcookie('my_array[1]', 'value2' , time()+3600);
setcookie('my_array[2]', 'value3' , time()+3600);

Dan setelah itu Anda akan mencetak $_COOKIE variabel, Anda akan melihat hal berikut

echo '<pre>';
print_r( $_COOKIE );
die();
Array
(
    [my_array] => Array
        (
            [0] => nilai1
            [1] => nilai2
            [2] => nilai3
        )

)

Ini fitur PHP yang terdokumentasi.

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


78
2018-02-28 20:30



Menggunakan serialisasi dan unserialize pada cookie adalah risiko keamanan. Pengguna (atau penyerang) dapat mengubah data cookie, kemudian ketika Anda membatalkannya, itu bisa menjalankan kode PHP di server Anda. Data cookie tidak boleh dipercaya. Gunakan JSON sebagai gantinya!

Dari situs PHP ...

Jangan berikan input pengguna yang tidak tepercaya ke unserialize (). Unserialization dapat menghasilkan kode yang dimuat dan dieksekusi karena instantiasi objek dan autoloading, dan pengguna jahat dapat mengeksploitasi ini. Gunakan format pertukaran data standar yang aman seperti JSON (melalui json_decode () dan json_encode ()) jika Anda perlu memberikan data serial kepada pengguna.


13
2017-11-05 15:44



Mencoba serialize(). Ini mengkonversi array ke dalam format string, yang kemudian dapat Anda gunakan unserialize() untuk mengubahnya kembali ke array. Skrip seperti WordPress menggunakan ini untuk menyimpan beberapa nilai ke bidang basis data tunggal.

Anda juga bisa menggunakan json_encode() seperti yang dikatakan Rob, yang mungkin berguna jika Anda ingin membaca cookie di javascript.


6
2018-01-27 10:40



Cookie pada dasarnya adalah teks, sehingga Anda dapat menyimpan larik dengan menyandikannya sebagai string JSON (lihat json_encode). Ketahuilah bahwa ada batasan pada panjang string yang dapat Anda simpan.


5
2018-01-27 10:39



Anda juga dapat mencoba menulis berbagai elemen di berbagai cookie. Nama cookie dapat disetel sebagai nama larik dan akan tersedia untuk skrip PHP Anda sebagai larik tetapi cookie terpisah disimpan di sistem pengguna. Pertimbangkan meledak () untuk menetapkan satu cookie dengan beberapa nama dan nilai. Tidak dianjurkan untuk menggunakan serialize () untuk tujuan ini, karena dapat menghasilkan lubang keamanan. Melihat setcookie Fungsi PHP untuk lebih jelasnya


2
2018-01-27 10:44



baru-baru ini saya telah membuat kode ini untuk klien saya, saya menggunakan array untuk cookie dalam kode ini, sebenarnya kode ini baru-baru ini dilihat halaman oleh pengguna menggunakan cookie, semoga itu membantu Anda ...!

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
2017-12-14 20:10