Saat server web merespons permintaan untuk resource, server dapat menyertakan
header Set-Cookie
beserta 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; Expires=Tue, 31 Dec 2999 23:59:59 GMT;
Artikel ini menjelaskan atribut cookie yang paling penting:
Menggunakan cookie HTTP menjelaskan atribut cookie secara lebih mendetail.
Aman
👉 Anda harus menyertakan Secure
secara default untuk semua cookie.
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,
saat penyerang secara diam-diam melakukan intervensi dalam komunikasi antara browser dan server untuk meneruskan informasi, dan berpotensi mengubahnya.
HTTPOnly
👉 Anda harus menyertakan HTTPOnly
secara default untuk semua cookie. Hanya abaikan jika Anda
memerlukan akses JavaScript.
Jika header Set-Cookie
menyertakan HTTPOnly
, cookie tidak dapat diakses
menggunakan document.cookie
. Hal ini membantu melindungi dari jenis serangan tertentu
yang menargetkan cookie.
SameSite
👉 SameSite=Lax
adalah default jika tidak ada nilai yang ditetapkan. SameSite=None
mengizinkan cookie lintas situs, tetapi berarti cookie akan diblokir jika ada pembatasan cookie pihak ketiga.
Permintaan resource dari situs yang berbeda dengan situs yang Anda kunjungi adalah permintaan lintas situs. Cookie yang ditetapkan sebagai respons terhadap permintaan lintas situs dikenal sebagai cookie pihak ketiga. Cari tahu selengkapnya: Apa yang dimaksud dengan cookie pihak ketiga?
Atribut SameSite
mengontrol apakah cookie pihak ketiga akan disertakan
dalam permintaan. Nilai ini memiliki tiga kemungkinan nilai: Strict
, Lax
, atau None
.
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 mereka 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
Tidak ada batasan: cookie akan disertakan dengan permintaan, baik
cookie tersebut lintas situs maupun tidak. Dengan SameSite=None
, cookie juga harus memiliki
atribut Secure
.
Cari tahu selengkapnya: Cookie SameSite dijelaskan.
Dipartisi
👉 Anda harus menyertakan atribut Partitioned
secara default jika membuat cookie pihak ketiga, kecuali jika Anda tahu secara eksplisit bahwa cookie tersebut perlu dibagikan di beberapa penyematan.
Atribut ini memungkinkan Anda mengaktifkan cookie ke penyimpanan yang dipartisi, dengan "toples cookie" terpisah per situs tingkat atas. Cookie memiliki kunci ganda, oleh situs level teratas serta domain yang menetapkannya.
Misalnya: bayangkan situs A dan situs B menyertakan iframe dari situs C. 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.
Expires dan Max-Age
👉 Hapus atribut Max-Age
dan Expires
kecuali jika Anda memerlukan cookie untuk
berlangsung lebih lama dari sesi saat ini. Browser akan menghapus cookie yang sudah tidak berlaku, jadi tidak ada gunanya menetapkan masa berlaku yang masih beberapa tahun lagi. Sebagai gantinya, Anda
harus mempertimbangkan untuk memuat ulang cookie saat pengguna mengunjungi kembali situs Anda.
Anda dapat menentukan tanggal dan waktu Expires
, atau Max-Age
dalam detik, setelah
cookie 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. Jenis cookie ini terkadang dikenal sebagai
cookie sesi.
Domain
👉 Kecuali jika Anda memerlukan cookie untuk disertakan dengan permintaan ke subdomain,
jangan sertakan atribut 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 pembatasan domain.
Misalnya, dengan respons dari situs cats.example
:
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
👉 Sertakan Path=/
dengan cookie jika Anda memerlukan semua permintaan ke jalur apa pun di situs Anda untuk menyertakan cookie. Jangan mengandalkan Path
untuk perlindungan keamanan.
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 apa pun yang diawali 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 bahwa
cookie cat=tabby
ditetapkan sebagai respons terhadap permintaan untuk
cats.example/images/tabby.jpg.
Jika tidak ada Path
yang ditetapkan, cookie hanya akan
disertakan dengan permintaan untuk 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