Memahami cookie

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
Tiga cookie yang dikirim ke browser dari server sebagai respons
Server menetapkan cookie menggunakan header Set-Cookie.

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
Tiga cookie yang dikirim dari browser ke server dalam permintaan
Browser Anda mengirimkan kembali cookie di header Cookie.

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"
JavaScript yang mengakses cookie dalam browser
JavaScript dapat mengakses cookie menggunakan document.cookie.

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.

Tiga cookie sedang dikirim ke browser dari permintaan yang berbeda pada halaman yang sama
Cookie dapat berasal dari berbagai domain yang berbeda di satu halaman.

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.

Cookie yang sama dikirim dalam tiga konteks yang berbeda
Cookie dalam konteks pihak ketiga dikirim saat mengunjungi halaman yang berbeda.

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.