Atribut cookie

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.

Diagram yang menunjukkan bahwa dua situs berbeda yang menyematkan pihak ketiga yang sama tidak akan lagi berbagi cookie untuk pihak ketiga tersebut.
Dengan partisi cookie, layanan pihak ketiga yang menetapkan cookie saat disematkan di satu situs level teratas tidak dapat mengakses cookie yang sama saat layanan tersebut disematkan di situs level teratas lainnya.

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 ke cats.example
  • Set-Cookie:cat=tabby; Domain=cats.example
    Cookie akan disertakan dengan permintaan ke cats.example, dan juga permintaan untuk resource di subdomain seperti fluffy.cats.example atau user.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

Alat

Cari tahu lebih lanjut