Pada saat saya menulis jawaban ini, jawaban yang diterima untuk pertanyaan ini tampaknya menyatakan bahwa browser tidak diharuskan untuk menghapus cookie ketika menerima cookie pengganti yang Expires
nilainya di masa lalu. Klaim itu salah. Pengaturan Expires
untuk berada di masa lalu adalah cara standar, khusus untuk menghapus cookie, dan agen pengguna diharuskan oleh spec untuk menghormatinya.
Menggunakan Expires
atribut di masa lalu untuk menghapus cookie adalah benar dan merupakan cara untuk menghapus cookie yang ditentukan oleh spesifikasi. Bagian contoh dari RFC 6255 menyatakan:
Akhirnya, untuk menghapus cookie, server mengembalikan header Set-Cookie dengan tanggal kedaluwarsa di masa lalu. Server akan berhasil dalam menghapus cookie hanya jika atribut Path dan Domain di header Set-Cookie cocok dengan nilai-nilai yang digunakan ketika cookie dibuat.
Bagian Persyaratan Agen Pengguna mencakup persyaratan berikut, yang bersama-sama memiliki efek bahwa cookie harus segera dihapus jika agen pengguna menerima cookie baru dengan nama yang sama dengan tanggal kedaluwarsa di masa lalu
Jika [saat menerima cookie baru] toko cookie berisi cookie dengan nama, domain, dan jalur yang sama dengan cookie yang baru dibuat:
- ...
- ...
- Perbarui waktu pembuatan cookie yang baru dibuat agar sesuai dengan waktu pembuatan cookie lama.
- Hapus cookie lama dari toko cookie.
Masukkan cookie yang baru dibuat ke toko cookie.
Cookie "kedaluwarsa" jika cookie memiliki tanggal kedaluwarsa di masa lalu.
Agen pengguna HARUS mengusir semua cookie yang kedaluwarsa dari toko cookie jika, sewaktu-waktu, cookie yang sudah kadaluarsa ada di toko kue.
Poin 11-3, 11-4, dan 12 di atas bersama-sama berarti bahwa ketika cookie baru diterima dengan nama, domain, dan jalur yang sama, cookie lama harus dihapus dan diganti dengan cookie baru. Akhirnya, poin di bawah tentang kadaluarsa cookie lebih lanjut menentukan bahwa setelah itu selesai, cookie baru juga harus segera diusir. Spesifikasi tidak menawarkan ruang gerak untuk browser pada titik ini; jika browser menawarkan opsi kepada pengguna untuk menonaktifkan kedaluwarsa cookie, seperti jawaban yang diterima menyarankan beberapa browser, maka itu akan melanggar spesifikasi. (Fitur seperti itu juga tidak banyak berguna, dan sejauh yang saya tahu tidak ada di browser apa pun.)
Lalu, mengapa OP dari pertanyaan ini mengamati bahwa pendekatan ini gagal? Meskipun saya belum membersihkan salinan dari Internet Explorer untuk memeriksa perilakunya, saya menduga itu karena nilai OP Expires
salah! Mereka menggunakan nilai ini:
expires=Thu, Jan 01 1970 00:00:00 UTC;
Namun, ini tidak valid secara sintaksis dalam dua cara.
Bagian sintaks dari spec menentukan bahwa nilai Expires
atribut harus a
rfc1123 -tanggal , didefinisikan dalam [RFC2616], Bagian 3.3.1
Mengikuti tautan kedua di atas, kami menemukan ini diberikan sebagai contoh format:
Sun, 06 Nov 1994 08:49:37 GMT
dan temukan bahwa definisi sintaks ...
mensyaratkan bahwa tanggal ditulis dalam format hari bulan tahun , bukan format bulan hari tahun seperti yang digunakan oleh penanya.
Secara khusus, ini mendefinisikan rfc1123-date
sebagai berikut:
rfc1123-date = wkday "," SP date1 SP time SP "GMT"
dan mendefinisikan date1
seperti ini:
date1 = 2DIGIT SP month SP 4DIGIT
; day month year (e.g., 02 Jun 1982)
dan
tidak mengizinkan UTC
sebagai zona waktu.
Spesifikasi tersebut berisi pernyataan berikut tentang offset zona waktu apa yang dapat diterima dalam format ini:
Semua stempel tanggal / waktu HTTP HARUS diwakili dalam Greenwich Mean Time (GMT), tanpa kecuali.
Terlebih lagi jika kita menggali lebih dalam ke spesifikasi asli format datetime ini, kita menemukan bahwa dalam spesifikasi awalnya di https://tools.ietf.org/html/rfc822 , bagian Sintaksis mencantumkan "UT" (artinya "waktu universal" ) sebagai nilai yang mungkin, tetapi tidak mencantumkan bukan UTC (Waktu Universal Terkoordinasi) yang valid. Sejauh yang saya tahu, menggunakan "UTC" dalam format tanggal ini tidak pernah valid; itu bukan nilai yang valid ketika format pertama kali ditentukan pada tahun 1982, dan spesifikasi HTTP telah mengadopsi versi format yang lebih ketat dengan melarang penggunaan semua nilai "zona" selain "GMT".
Jika penanya di sini menggunakan Expires
atribut seperti ini , maka:
expires=Thu, 01 Jan 1970 00:00:00 GMT;
maka itu mungkin akan berhasil.