Cookie adalah sepotong data yang disimpan di browser yang digunakan untuk mempertahankan status dan informasi lain yang diperlukan situs untuk menjalankan fiturnya.
Cookie adalah file kecil yang disimpan situs di komputer pengguna mereka. Informasi yang disimpannya berjalan bolak-balik antara browser dan situs.
Setiap cookie adalah pasangan nilai kunci bersama dengan sejumlah atribut yang mengontrol waktu dan tempat cookie tersebut digunakan. Atribut ini digunakan untuk menetapkan hal seperti tanggal habis masa berlaku atau menunjukkan bahwa cookie hanya boleh dikirim melalui HTTPS. Anda dapat menetapkan cookie di header HTTP atau melalui antarmuka JavaScript.
Cookie adalah salah satu metode yang tersedia untuk menambahkan status persisten ke situs web. Dari tahun ke tahun kemampuan mereka telah berkembang dan berevolusi, tetapi meninggalkan platform dengan beberapa masalah lama yang bermasalah. Untuk mengatasi hal ini, browser (termasuk Chrome, Firefox, dan Edge) mengubah perilakunya untuk menerapkan setelan default yang lebih menjaga privasi.
Cara kerja cookie
Misalnya Anda memiliki blog di mana Anda ingin menampilkan "Yang baru" promo ke pelanggan. Pengguna dapat menutup promo, lalu mereka tidak akan melihatnya lagi untuk sementara waktu. Anda dapat menyimpan preferensi tersebut dalam cookie, dan menetapkannya agar habis masa berlakunya dalam waktu satu bulan (2.600.000 detik), dan hanya mengirimnya melalui HTTPS. {i>Header<i} itu akan terlihat seperti ini:
Set-Cookie: promo_shown=1; Max-Age=2600000; Secure
Saat pembaca melihat halaman yang memenuhi persyaratan tersebut—mereka berada di koneksi aman dan cookie baru berusia kurang dari satu bulan—browser mereka akan mengirim header ini dalam permintaannya:
Cookie: promo_shown=1
Anda juga dapat menambahkan dan membaca cookie yang tersedia untuk situs tersebut di JavaScript menggunakan
document.cookie
. Membuat tugas ke document.cookie
akan membuat atau
mengganti cookie
dengan kunci tersebut. Misalnya, Anda dapat mencoba hal berikut di
konsol JavaScript browser:
→ document.cookie = "promo_shown=1; Max-Age=2600000; Secure"
← "promo_shown=1; Max-Age=2600000; Secure"
Membaca document.cookie
akan menghasilkan semua cookie yang dapat diakses saat ini
konteks, dengan setiap cookie dipisahkan dengan titik koma:
→ document.cookie;
← "promo_shown=1; color_theme=peachpuff; sidebar_loc=left"
Jika Anda mencobanya pada pilihan situs populer, Anda akan melihat bahwa sebagian besar
mereka menetapkan secara signifikan lebih dari hanya tiga cookie. Di kebanyakan kasus, mereka
cookie dikirim pada setiap permintaan ke domain tersebut, yang memiliki
implikasinya. Bandwidth upload sering kali lebih terbatas daripada download untuk
sehingga overhead pada semua permintaan keluar menambah penundaan pada waktu Anda
ke byte pertama. Bersikaplah konservatif dalam jumlah dan ukuran cookie yang Anda tetapkan. Merek
penggunaan atribut Max-Age
untuk membantu memastikan bahwa cookie tidak tertunda
lebih lama dari yang diperlukan.
Apa yang dimaksud dengan cookie pihak pertama dan pihak ketiga?
Jika Anda kembali ke pilihan situs yang sama yang Anda lihat sebelumnya, Anda mungkin memperhatikan bahwa ada {i>cookie<i} yang ada untuk berbagai domain, tidak hanya dengan yang Anda kunjungi saat ini. Cookie yang cocok dengan domain situs saat ini, yaitu, yang ditampilkan di kolom URL browser, sebagai cookie pihak pertama. Demikian pula, cookie dari domain selain di situs saat ini disebut sebagai cookie pihak ketiga. Ini bukanlah absolut label tetapi relatif terhadap konteks pengguna; cookie yang sama dapat pihak pertama atau pihak ketiga, tergantung pada situs mana pengguna berada pada saat itu.
Melanjutkan contoh di atas, misalkan salah satu postingan blog Anda memiliki
gambar kucing yang sangat mengagumkan
di dalamnya dan disimpan di
/blog/img/amazing-cat.png
. Karena itu gambar yang menakjubkan, orang lain juga
menggunakannya langsung di situs mereka. Jika pengunjung pernah ke blog Anda dan memiliki
cookie promo_shown
, lalu saat mereka melihat amazing-cat.png
di platform lain
situs seseorang yang cookie akan dikirim dalam permintaan gambar tersebut. Ini
tidak terlalu berguna bagi siapa pun karena promo_shown
tidak digunakan untuk apa pun
di situs pengguna lain tersebut, ini hanya
menambahkan beban atas permintaan.
Jika itu adalah efek yang tidak diinginkan, mengapa Anda ingin melakukannya? Ini dia mekanisme yang memungkinkan situs mempertahankan status saat sedang digunakan konteks pihak ketiga. Misalnya, jika Anda menyematkan video YouTube di situs Anda, pengunjung akan melihat tombol "Tonton Nanti" di pemutar. Jika pengunjung Anda sudah login ke YouTube, sesi tersebut tersedia di pemutar yang disematkan oleh cookie pihak ketiga—artinya "Tonton Nanti" tombol ini akan cukup simpan video sekali saja, tanpa perlu meminta login atau arahkan mereka keluar dari halaman Anda dan kembali ke YouTube.
Salah satu karakteristik budaya web adalah bahwa web cenderung dibuka oleh
secara default. Hal inilah yang memungkinkan
begitu banyak orang untuk membuat
konten dan aplikasi mereka sendiri di sana. Namun, hal ini juga membawa sejumlah
masalah keamanan dan privasi. Serangan pemalsuan permintaan lintas situs (CSRF) bergantung pada
fakta bahwa cookie disertakan pada permintaan apa pun ke asal tertentu, terlepas dari
yang memulai permintaan. Misalnya, jika Anda membuka evil.example
, situs ini dapat
memicu permintaan ke your-blog.example
, dan browser Anda akan dengan senang hati melampirkan
cookie yang terkait. Jika blog Anda tidak berhati-hati dengan cara memvalidasi
permintaan tersebut, evil.example
dapat memicu tindakan seperti menghapus postingan atau menambahkan
konten mereka sendiri.
Pengguna juga menjadi lebih sadar bagaimana cookie dapat digunakan untuk melacak
aktivitas di beberapa situs. Namun hingga saat ini
belum ada cara untuk
menyatakan maksud Anda dengan cookie secara eksplisit. Cookie promo_shown
Anda seharusnya
hanya dikirim dalam konteks pihak pertama, sedangkan cookie sesi untuk widget
yang dimaksudkan untuk disematkan di situs lain,
secara sengaja dibuat di sana untuk menyediakan
status login dalam konteks pihak ketiga.
Anda dapat menyatakan intent secara eksplisit menggunakan cookie dengan menetapkan atribut SameSite yang sesuai.
Untuk mengidentifikasi cookie pihak pertama dan menetapkan atribut yang sesuai, lihat Resep cookie pihak pertama.