Saat merespons permintaan untuk resource, server web dapat menyertakan header Set-Cookie
bersama dengan responsnya. Header tersebut memberi tahu browser Anda untuk
menyimpan cookie. Contoh: Set-Cookie:cat=tabby
.
Apa itu cookie? menjelaskan cara kerja cookie.
Selain memberikan nama dan nilai cookie, Set-Cookie
dapat menyertakan atribut untuk mengontrol apakah cookie ditetapkan, dan kapan masa berlakunya berakhir. Atribut
cookie dipisahkan dengan titik koma. Contoh:
Set-Cookie:cat=tabby; Secure; HTTPOnly; Expires=Tue, 31 Dec 2999 23:59:59 GMT;
Dokumen ini menjelaskan atribut cookie yang paling penting:
Menggunakan cookie HTTP menjelaskan atribut cookie secara lebih mendetail dari segi teknis.
Aman
Jika header Set-Cookie
menyertakan Secure
, cookie hanya akan disertakan dengan permintaan terenkripsi yang menggunakan protokol HTTPS: cookie tidak akan disertakan dalam permintaan HTTP. Hal ini dapat membantu menghentikan
serangan perantara,
di mana penyerang secara diam-diam mengintervensi komunikasi antara
browser dan server — untuk meneruskan informasi, dan berpotensi mengubahnya.
HTTPOnly
Jika header Set-Cookie
menyertakan HTTPOnly
, JavaScript tidak dapat mengakses
cookie, misalnya dengan menggunakan document.cookie
. Hal ini membantu melindungi dari jenis serangan tertentu yang menargetkan cookie.
SameSite
Permintaan resource dari situs yang berbeda dengan situs yang Anda kunjungi adalah permintaan lintas situs. Cookie yang disetel sebagai respons terhadap permintaan lintas situs adalah cookie pihak ketiga.
Atribut SameSite
mengontrol apakah cookie pihak ketiga akan disertakan
dalam permintaan. Nilai ini memiliki tiga kemungkinan nilai: Strict
, Lax
, atau None
.
Cari tahu lebih lanjut: Apa yang dimaksud dengan cookie pihak ketiga?
Ketat
Cookie hanya akan dikirim sebagai respons terhadap permintaan dari halaman yang ada di situs asal cookie. Misalnya: bayangkan pengguna mengunjungi cats.example
dan memiliki
cookie yang ditetapkan dengan atribut SameSite=Strict
. Kemudian, pengguna berada di situs lain, dan dia mengikuti link ke halaman di cats.example
. Cookie yang ditetapkan tidak akan disertakan dalam permintaan tersebut.
Lax
Cara kerjanya sama seperti Strict
, kecuali browser juga akan menyertakan
cookie saat pengguna mengikuti link ke situs asal cookie. (Dalam contoh Strict
sebelumnya, cookie akan disertakan saat pengguna mengikuti link ke cats.example
.) Lax
adalah default, jika tidak ada atribut SameSite
yang disertakan dalam header Set-Cookie
.
Tidak ada
Tanpa batasan: cookie akan disertakan dengan permintaan, baik lintas situs maupun tidak. Dengan SameSite=None
, cookie juga harus memiliki atribut
Secure
.
Dipartisi
Dengan atribut ini, Anda dapat mengikutsertakan cookie ke penyimpanan yang dipartisi, dengan "toples cookie" terpisah per situs tingkat atas. Cookie memiliki kunci ganda, oleh situs tingkat teratas serta domain yang menetapkannya.
Misalnya: bayangkan situs A dan situs B menyertakan iframe dari situs C. Kumpulan cookie yang dipartisi yang ditetapkan oleh iframe di situs A tidak dapat diakses oleh iframe di situs B: cookie AC terpisah dari cookie BC.
Cookie dengan atribut Partitioned
dikenal sebagai CHIPS: Cookies Having Independent Partitioned State.
Cookie yang dipartisi harus memiliki atribut Secure
.
Cari tahu lebih lanjut: Cookie yang Memiliki Status Partisi Independen.
Berakhir dan Max-Age
Anda dapat menentukan tanggal dan waktu Expires
, atau Max-Age
dalam detik, setelah
cookie harus dihapus dan tidak lagi dikirim. Contoh:
Set-Cookie:cat=tabby; Expires=Tue, 31 Dec 2999 23:59:59 GMT;
Set-Cookie:cat=tabby; Max-Age=86400
Jika Anda tidak menentukan atribut Max-Age
atau Expires
, cookie akan dihapus saat sesi saat ini berakhir. Cookie jenis ini terkadang dikenal sebagai
cookie sesi.
Domain
Jika header Set-Cookie
memiliki atribut Domain
, cookie akan disertakan
dengan permintaan ke domain yang ditentukan, dan subdomainnya.
Jika header Set-Cookie
tidak memiliki atribut Domain
, cookie tidak akan disertakan dengan permintaan ke subdomain.
Dengan kata lain, menyertakan atribut Domain
mengurangi batasan domain.
Misalnya, dengan respons dari cats.example
situs:
Set-Cookie:cat=tabby
Cookie hanya akan disertakan dengan permintaan kecats.example
Set-Cookie:cat=tabby; Domain=cats.example
Cookie akan disertakan dengan permintaan kecats.example
, dan juga permintaan untuk resource di subdomain sepertifluffy.cats.example
atauuser.assets.cats.example
Jalur
Jika atribut Path
disertakan dalam header respons Set-Cookie
, cookie yang ditetapkan hanya akan disertakan dalam permintaan ke URL (di situs yang menetapkan cookie) yang cocok dengan nilai Path
.
Contoh:
Set-Cookie:cat=tabby; Path=/articles
Cookie akan disertakan untuk permintaan ke jalur URL yang dimulai dengan/articles
:
✅https://cats.example/articles/tabby/index.html
✅https://cats.example/articles/breeds/tabby/index.html
❎https://cats.example/images/tabby.jpg
❎https://cats.example/en/articles/tabby/index.html
Set-Cookie:cat=tabby; Path=/
Semua permintaan ke URL apa pun di situs akan menyertakan cookie.
Jika header respons Set-Cookie
tidak memiliki nilai Path
, cookie hanya akan disertakan dengan permintaan ke direktori yang sama. Misalnya, bayangkan cookie cat=tabby
disetel sebagai respons terhadap permintaan cats.example/images/tabby.jpg.
. Jika tidak ada Path
yang disetel, cookie hanya akan disertakan dengan permintaan file dalam direktori cats.example/images
.
Demo
- 1pc.glitch.me: demo cookie pihak pertama
- 3pc.glitch.me: demo cookie pihak ketiga
Alat
- Melihat, menambahkan, mengedit, dan menghapus cookie di Chrome DevTools
- Privacy Sandbox Analysis Tool
Cari tahu lebih lanjut
- Resep cookie pihak pertama
- Apa itu cookie?
- Apa yang dimaksud dengan cookie pihak ketiga?
- Permintaan dan respons HTTP
- Alat cookie
- Demo cookie
- Menggunakan cookie HTTP
- Cookie SameSite dijelaskan
- OWASP: Cookie