Karena masalah cookie domain / subdomain aneh yang saya dapatkan, saya ingin tahu bagaimana browser menangani cookie. Jika mereka melakukannya dengan cara yang berbeda, akan menyenangkan mengetahui perbedaannya.
Dengan kata lain - ketika browser menerima cookie, cookie itu MUNGKIN memiliki domain dan jalur yang dilampirkan padanya. Atau tidak, dalam hal ini browser mungkin menggantikan beberapa default untuk mereka. Pertanyaan 1: apa itu?
Kemudian, ketika browser akan membuat permintaan, ia memeriksa cookie dan menyaring yang harus dikirim untuk permintaan itu. Ia melakukannya dengan mencocokkannya dengan jalur dan domain permintaan. Pertanyaan 2: apa aturan yang cocok?
Ditambahkan:
Alasan saya menanyakan hal ini adalah karena saya tertarik pada beberapa kasus tepi. Suka:
- Akankah cookie untuk
.example.com
tersediawww.example.com
? - Akankah cookie untuk
.example.com
tersediaexample.com
? - Akankah cookie untuk
example.com
tersediawww.example.com
? - Akankah cookie untuk
example.com
tersediaanotherexample.com
? - Akan
www.example.com
dapat mengatur cookie untukexample.com
? - Akan
www.example.com
dapat mengatur cookie untukwww2.example.com
? - Akan
www.example.com
dapat mengatur cookie untuk.com
? - Dll
Menambahkan 2:
Juga, bisakah seseorang menyarankan bagaimana saya harus mengatur cookie sehingga:
- Itu dapat diatur dengan salah satu
www.example.com
atauexample.com
; - Ini dapat diakses oleh keduanya
www.example.com
danexample.com
.
Jawaban sebelumnya sedikit ketinggalan jaman.
RFC 6265 diterbitkan pada tahun 2011, berdasarkan pada konsensus browser pada saat itu. Sejak itu, ada beberapa komplikasi dengan domain akhiran publik. Saya sudah menulis artikel yang menjelaskan situasi saat ini - http://bayou.io/draft/cookie.domain.html
Untuk meringkas, aturan yang harus diikuti tentang domain cookie:
The domain asal dari cookie adalah domain dari permintaan berasal.
Jika domain asal adalah IP, atribut domain cookie tidak boleh ditetapkan.
Jika atribut domain cookie tidak disetel, cookie hanya berlaku untuk domain asalnya.
Jika atribut domain cookie ditetapkan,
Dapat diturunkan bahwa cookie selalu berlaku untuk domain asalnya.
Domain cookie tidak boleh memiliki titik awal, seperti di
.foo.com
- cukup gunakanfoo.com
Sebagai contoh,
x.y.z.com
dapat mengatur domain cookie untuk dirinya sendiri atau orang tua -x.y.z.com
,y.z.com
,z.com
. Tapi tidakcom
, yang merupakan sufiks publik.y.z.com
berlaku untuky.z.com
,x.y.z.com
,a.x.y.z.com
dllContoh akhiran publik -
com
,edu
,uk
,co.uk
,blogspot.com
,compute.amazonaws.com
sumber
x.y.z.com
bisa mengatur cookiez.com
?Untuk cakupan yang luas, tinjau isi RFC2965 . Tentu saja itu tidak berarti bahwa semua browser berperilaku dengan cara yang persis sama.
Namun secara umum aturan untuk Path default jika tidak ada yang ditentukan dalam cookie adalah path di URL dari mana header Set-Cookie tiba. Demikian pula default untuk Domain adalah nama host lengkap di URL dari mana Set-Cookie tiba.
Aturan yang cocok untuk domain mengharuskan Domain cookie untuk mencocokkan host yang menjadi tujuan permintaan tersebut. Cookie dapat menentukan kecocokan domain yang lebih luas dengan menyertakan *. dalam atribut domain Set-Cookie (area yang peramban ini dapat bervariasi). Mencocokkan jalur (dengan asumsi pencocokan domain) adalah masalah sederhana bahwa jalur yang diminta harus berada di dalam jalur yang ditentukan pada cookie. Biasanya cookie sesi diatur dengan path = / atau path = / applicationName / sehingga cookie tersedia untuk semua permintaan ke dalam aplikasi.
Tanggapan untuk Ditambahkan:
*
Saya tidak dapat menguji ini sekarang tetapi saya memiliki firasat bahwa setidaknya IE7 / 6 akan memperlakukan jalanexample.com
seolah-olah itu.example.com
.sumber
RFC terakhir (ketiga tepatnya) untuk masalah ini adalah RFC-6265 (Obsoletes RFC-2965 yang pada gilirannya usang RFC-2109).
Menurutnya jika server menghilangkan atribut Domain, agen pengguna akan mengembalikan cookie hanya ke server asal (server di mana sumber daya yang diberikan berada). Tetapi itu juga memperingatkan bahwa beberapa agen pengguna yang ada memperlakukan atribut Domain yang tidak ada seolah-olah atribut Domain ada dan berisi nama host saat ini (Misalnya, jika example.com mengembalikan header Set-Cookie tanpa atribut Domain, agen pengguna ini akan juga mengirim cookie ke www.example.com).
Ketika atribut Domain telah ditentukan, itu akan diperlakukan sebagai nama domain lengkap (jika ada titik terdepan dalam atribut itu akan diabaikan). Server harus cocok dengan domain yang ditentukan dalam atribut (memiliki nama domain yang persis sama atau menjadi subdomainnya) untuk mendapatkan cookie ini. Lebih tepatnya ditentukan di sini .
Jadi, misalnya:
Domain=.example.com
setara denganDomain=example.com
Domain=www.example.com
akan menutup jalan untuk www4.example.comPS: trailing koma pada atribut Domain akan menyebabkan agen pengguna mengabaikan atribut = (
sumber
Saya menguji semua kasing di Chrome, Firefox, Safari terbaru pada 2019.
Tanggapan untuk Ditambahkan:
sumber
RFC diketahui tidak mencerminkan kenyataan.
Lebih baik memeriksa draft-ietf-httpstate-cookie , bekerja dalam proses.
sumber
Ada aturan yang menentukan apakah browser akan menerima header respons Set-header (penulisan cookie sisi-server), aturan / interpretasi yang sedikit berbeda untuk cookie yang diatur menggunakan Javascript (Saya belum menguji VBScript).
Lalu ada aturan yang menentukan apakah browser akan mengirim cookie bersama dengan permintaan halaman.
Ada perbedaan antara mesin peramban utama cara penanganan kecocokan domain, dan bagaimana parameter dalam nilai jalur ditafsirkan. Anda dapat menemukan beberapa bukti empiris dalam artikel Bagaimana Peramban Menangani Cookie Berbeda
sumber
Saya terkejut membaca bagian 3.3.2 tentang menolak cookie:
http://tools.ietf.org/html/rfc2965
Yang mengatakan bahwa browser harus menolak cookie dari xyzcom dengan domain .z.com, karena 'xy' mengandung sebuah titik. Jadi, kecuali saya salah menafsirkan RFC dan / atau pertanyaan di atas, mungkin ada pertanyaan yang ditambahkan:
Apakah cookie untuk .example.com tersedia untuk www.yyy.example.com? Tidak.
Akankah cookie ditetapkan oleh server asal www.yyy.example.com, dengan domain .example.com, apakah nilainya dikirim oleh agen pengguna ke xxx.example.com? Tidak.
sumber
z.com
untuk diterapkan kez.com
dan semua subdomain.Tidak, tetapi
example.com.fr
mungkin dapat mengatur cookie untukexample2.com.fr
. Firefox melindungi ini dengan mempertahankan daftar TLD: http://securitylabs.websense.com/content/Blogs/3108.aspxRupanya Internet Explorer tidak mengizinkan domain dua huruf untuk mengatur cookie, yang saya kira menjelaskan mengapa
o2.ie
hanya dialihkan keo2online.ie
. Saya sering bertanya-tanya tentang itu.sumber