Mengapa header Set-Cookie berhasil disetel tetapi browser tidak menyimpan Cookie saya?
Ini adalah masalah paling umum, browser tidak akan secara aktif melaporkan kesalahan melainkan membuang Cookie yang tidak patuh secara diam-diam. Alasan umum meliputi: SameSite=None tanpa Secure, Cookie Secure disetel di halaman HTTP (kecuali localhost), awalan __Host-/__Secure- tidak memenuhi batasan, Domain/Path tidak cocok, melebihi batas ukuran 4KB, Max-Age nol atau negatif. Disarankan tempelkan Set-Cookie terlebih dahulu ke alat ini, lihat lencana peringatan untuk mengidentifikasi penyebab spesifik, kemudian buka Chrome DevTools → Application → Cookies, lihat di bawah nama domain yang sesuai apakah ada segitiga peringatan kuning, arahkan kursor dapat melihat alasan penolakan spesifik.
Apa perbedaan sebenarnya antara Strict, Lax, None dari SameSite? Kapan menggunakan yang mana?
Strict sepenuhnya tidak mengizinkan pengiriman lintas situs, paling aman tetapi pengguna yang mengklik dari tautan luar akan tampak belum login, cocok untuk Cookie operasi sensitif seperti pembayaran/ubah kata sandi. Lax adalah nilai default Chrome 80+, mengizinkan membawa saat menavigasi kembali melalui navigasi GET tingkat atas (mengklik tautan luar kembali ke situs Anda), tetapi tidak membawa dalam sumber daya anak seperti iframe/img/script/XHR/formulir POST, adalah nilai yang disarankan untuk sebagian besar skenario. None mengizinkan pengiriman di semua skenario lintas situs (digunakan untuk login tunggal SSO, iframe tersemat pihak ketiga, panggilan API lintas situs), tetapi harus menyetel Secure secara bersamaan, jika tidak browser akan menolak langsung.
Mengapa SameSite=None harus dipasangkan dengan Secure?
Ini adalah aturan yang diberlakukan wajib oleh Chrome sejak versi 80 (Februari 2020), Firefox, Edge, Safari juga telah mengikuti. Karena SameSite=None secara eksplisit mengizinkan pengiriman Cookie lintas situs, penyerang lebih mudah melakukan serangan CSRF atau penyadapan dalam skenario lintas situs, harus dipasangkan dengan Secure (transmisi terenkripsi HTTPS) untuk mengurangi risiko. Jika Cookie SameSite=None Anda disetel di bawah HTTP, browser akan membuangnya langsung tanpa menyimpan. Alat ini akan mendeteksi kombinasi SameSite=None tanpa Secure dan memberi peringatan merah.
Menggunakan Max-Age atau Expires? Apa perbedaannya?
Utamakan menggunakan Max-Age. Max-Age adalah waktu relatif (kedaluwarsa setelah berapa detik), tidak bergantung pada jam klien, browser mulai menghitung mundur setelah diterima; Expires adalah titik waktu absolut, bergantung pada waktu lokal komputer pengguna (pengguna mengubah jam ke 1970 maka Cookie kedaluwarsa segera). Ketika keduanya ada secara bersamaan, Max-Age memiliki prioritas lebih tinggi (RFC 6265 menetapkan secara eksplisit). Jika keduanya tidak disetel, Cookie menjadi「Cookie Sesi」, kedaluwarsa saat browser ditutup. Alat ini akan memberikan saran untuk kasus yang telah menyetel Expires tetapi tidak menyetel Max-Age, menyarankan untuk menambahkan Max-Age. Perhatikan satuan Max-Age adalah detik bukan milidetik.
Apa perbedaan antara Path=/ dan tidak menyetel Path?
Path menentukan di permintaan jalur URL mana browser akan membawa Cookie ini. Saat tidak menyetel Path, browser secara default menggunakan「jalur setelah menghapus segmen terakhir dari URL respons」, misalnya menyetel Cookie dari /api/user/login, Path default adalah /api/user/, maka permintaan di bawah jalur / dan /order/ tidak akan membawa Cookie ini. Menyetel Path=/ secara eksplisit dapat membuat Cookie berlaku untuk seluruh situs. Perhatikan pencocokan Path adalah pencocokan awalan, Path=/api juga akan cocok dengan /api/, /api/user, /api/v2/abc, dll. Cookie awalan __Host- wajib mensyaratkan Path=/.
Apa perbedaan antara Domain dimulai dengan titik (misalnya .example.com) dan tanpa titik?
Di browser modern (versi terbaru Chrome, Firefox, Edge, Safari), keduanya telah setara, keduanya membuat Cookie berlaku untuk example.com dan semua subdomain-nya (a.example.com, b.c.example.com). Titik di awal adalah cara penulisan lama dari era RFC 2109, RFC 6265 telah menetapkan secara eksplisit mengabaikan titik di awal. Namun, untuk keterbacaan disarankan menulis bentuk tanpa titik. Alat ini akan memberikan saran untuk kasus Domain dengan titik di awal (bukan kesalahan, tetapi merupakan cara penulisan warisan sejarah). Perhatikan: Saat tidak menyetel Domain, Cookie hanya berlaku untuk host saat ini (subdomain tidak membawa), setelah menyetel Domain akan berlaku untuk subdomain.
Apa itu awalan __Host- dan __Secure-? Bisakah tidak menulis awalan?
Ini adalah awalan keamanan nama Cookie yang diperkenalkan oleh RFC 6265bis, digunakan untuk menambahkan batasan keras pada Cookie keamanan tinggi: ketika browser melihat nama Cookie dimulai dengan __Host-, akan secara wajib mensyaratkan harus secara bersamaan menyetel Secure, Path=/, tidak boleh menyetel Domain, salah satu syarat tidak terpenuhi akan menolak penyimpanan langsung; awalan __Secure- mensyaratkan harus menyetel Secure, atribut lain dapat dikonfigurasi. Tidak menulis awalan juga dapat berfungsi (sebagian besar Cookie tidak menggunakan awalan), tetapi untuk Cookie keamanan tinggi seperti pengidentifikasi sesi, Token otorisasi, sangat disarankan menggunakan awalan __Host-, karena dapat mencegah serangan injeksi Cookie di tingkat subdomain/jalur. Alat ini akan otomatis memeriksa kepatuhan kedua jenis awalan.
Apakah HttpOnly Cookie benar-benar aman? Mencegah XSS dan CSRF?
HttpOnly dapat mencegah JavaScript membaca nilai Cookie melalui document.cookie, adalah garis pertahanan penting untuk <strong>mengurangi pencurian sesi XSS</strong>, tetapi tidak mahakuasa: penyerang XSS masih dapat mengirim permintaan (permintaan otomatis membawa Cookie) di browser pengguna untuk melakukan operasi (ini adalah cakupan CSRF); HttpOnly juga tidak dapat bertahan dari serangan CSRF (perlu kombinasi SameSite atau CSRF Token). Hanya ketika menggunakan tiga serangkai HttpOnly+Secure+SameSite=Lax/Strict secara bersamaan baru mencapai tingkat keamanan dasar. Cookie sensitif (session, JWT, access_token) harus HttpOnly, tidak perlu jangan biarkan JS depan membaca. Alat ini akan memberi peringatan pada Cookie yang kurang HttpOnly.
Apa itu Partitioned (CHIPS) Cookie? Kapan perlu menggunakannya?
Partitioned adalah atribut baru yang diperkenalkan Chrome untuk menghadapi penghentian Cookie pihak ketiga, nama lengkapnya adalah Cookies Having Independent Partitioned State (CHIPS). Cookie pihak ketiga tradisional (misalnya Cookie yang disetel oleh layanan iklan/penyematan di banyak situs) dibagikan secara global, akan digunakan untuk melacak pengguna lintas situs. Setelah menambahkan Partitioned, browser akan menyimpan secara terpisah Cookie pihak ketiga tersebut menurut situs tingkat atas: Cookie pihak ketiga yang dilihat pengguna di situs A dan situs B sepenuhnya independen, tidak dapat berbagi identitas lintas situs. Skenario penggunaan: komponen video/peta/pembayaran tersemat, plugin layanan pelanggan pihak ketiga, iframe SSO lintas situs tersemat. Menggunakan Partitioned harus menyetel Secure secara bersamaan, disarankan dipasangkan dengan awalan __Host-.
Berapa maksimal satu Cookie dapat menyimpan data? Berapa banyak yang dapat diletakkan per nama domain?
Menurut RFC 6265, browser setidaknya mendukung 4096 byte per Cookie (termasuk nama, nilai, dan atribut), browser utama (Chrome/Firefox/Safari/Edge) semua menjalankan batas ini, bagian yang melebihi akan dipotong atau dibuang secara diam-diam. Batasan jumlah berbeda-beda menurut browser: Chrome sekitar 180 per nama domain, Firefox sekitar 150, Safari sekitar 600 (dan terpengaruh oleh kebijakan pembersihan tujuh hari ITP), setelah melebihi browser akan membuang Cookie tertua menurut strategi LRU. Disarankan Cookie hanya menyimpan pengidentifikasi sesi, jangan meletakkan data bisnis besar ke dalam Cookie (data bisnis letakkan di localStorage atau Session server).
Apakah mendukung penyalinan Set-Cookie langsung dari Chrome DevTools untuk di-parse? Perlu menghapus awalan secara manual?
Sepenuhnya mendukung, tidak perlu pemrosesan manual. Anda dapat di Chrome DevTools → panel Network klik permintaan target, salin langsung nilai Set-Cookie dengan mengklik kanan di area Response Headers (saat banyak baris, Ctrl/⌘+klik untuk memilih banyak atau salin seluruh bagian), tempelkan ke area input alat ini saja. Alat akan otomatis menghapus awalan Set-Cookie: di awal setiap baris (tidak sensitif huruf besar-kecil), otomatis memproses spasi awal dan akhir baris, menangani dengan benar karakter khusus seperti koma, titik koma yang terkandung dalam tanggal Expires, juga dapat menangani dengan benar nilai Cookie dengan tanda kutip ganda.
Mengapa karakter non-ASCII atau karakter khusus dalam nilai Cookie menjadi bentuk %XX?
RFC 6265 mensyaratkan nilai Cookie hanya dapat menggunakan himpunan bagian aman dalam kumpulan karakter ASCII, tidak dapat langsung berisi karakter non-ASCII, spasi, koma, titik koma, dll. Banyak framework sisi server saat menyetel Cookie akan otomatis melakukan encoding URL (encodeURIComponent/Percent-encoding) untuk karakter non-ASCII, misalnya teks beraksara bahasa Indonesia akan dienkode menjadi bentuk %XX. Browser juga mempertahankan bentuk encoding saat mengirim kembali. Ketika alat ini mendeteksi nilai berisi encoding %XX, akan otomatis menampilkan teks asli setelah didekode decodeURIComponent dengan panah hijau di samping nilai asli, memudahkan Anda melihat konten asli.
Apa perbedaan antara Set-Cookie dan header permintaan Cookie?
Kedua header ini sepenuhnya berbeda arah: Set-Cookie adalah header respons (server → browser), hanya muncul dalam respons, dapat muncul beberapa kali, setiap kali menyetel satu Cookie, berisi atribut lengkap (Secure/HttpOnly/Path/Domain, dll.); Cookie adalah header permintaan (browser → server), setiap permintaan hanya muncul satu kali, di dalamnya adalah pasangan name=value datar dari semua Cookie yang saat ini cocok cakupan (name1=v1; name2=v2), sama sekali tidak berisi informasi atribut. Artinya server tidak dapat mengetahui dari permintaan apakah suatu Cookie telah menyetel HttpOnly atau Secure, informasi atribut hanya disimpan secara lokal oleh browser. Untuk mem-parse header permintaan Cookie, silakan gunakan <a href='/network/http-cookie-parser/'>Parser header permintaan Cookie</a> yang menyertainya.
Mengapa Cookie saya di Safari hilang setelah beberapa hari?
Ini adalah mekanisme Pencegahan Pelacakan Cerdas (ITP: Intelligent Tracking Prevention) Safari yang bekerja. Sejak ITP 2.1, jika pengguna tidak berinteraksi langsung dengan nama domain tersebut dalam 7 hari (yaitu tidak mengunjungi langsung situs nama domain tersebut), Safari akan membersihkan semua Cookie dan data situs di bawah nama domain tersebut, berapa pun Max-Age/Expires yang disetel. Ini paling berdampak pada layanan tersemat pihak ketiga, terhadap Cookie situs utama tidak terpengaruh saat pengguna mengunjungi secara terus-menerus. Selain itu, Safari juga membatasi Cookie pihak ketiga lebih ketat daripada Chrome. Solusi meliputi: menggunakan atribut Partitioned, meminta izin melalui Storage Access API, atau menyegarkan kembali Cookie saat pengguna mengunjungi situs utama. Bab pemecahan masalah alat ini memiliki panduan debugging Safari yang lebih rinci.
Apakah alat mendukung parsing massal banyak Set-Cookie? Apakah mengunggah konten Cookie ke server?
Mendukung parsing massal. Area input mendukung penempelan sebanyak baris Set-Cookie apa pun (misalnya menempelkan seluruh bagian header respons sekaligus), setiap Set-Cookie akan diparse dengan nomor urut independen, banyak kartu atribut menampilkan atribut dan peringatan masing-masing secara terpisah. Semua proses parsing sepenuhnya diselesaikan secara lokal di browser Anda (pemrosesan JavaScript front-end murni), konten Cookie tidak diunggah ke server mana pun, juga tidak mengirim permintaan jaringan, informasi sensitif seperti Session/Token yang Anda tempelkan tidak akan meninggalkan komputer Anda, dapat digunakan dengan tenang.