Saya punya dua pertanyaan. Saya mengerti bahwa jika saya menentukan domain sebagai .mydomain.com
(dengan titik terkemuka) di cookie yang semua subdomain dapat membagikan cookie.
Bisakah subdomain.mydomain.com
mengakses cookie yang dibuat di mydomain.com
(tanpa www
subdomain)?
Bisakah mydomain.com
(tanpa www
subdomain) mengakses cookie jika dibuat subdomain.mydomain.com
?
Jawaban:
2 domain
mydomain.com
dansubdomain.mydomain.com
hanya dapat membagikan cookie jika domain secara eksplisit disebutkan diSet-Cookie
header. Kalau tidak, ruang lingkup cookie dibatasi untuk host permintaan. (Ini disebut sebagai "cookie hanya host". Lihat Apa itu cookie hanya host? )Misalnya, jika Anda mengirim tajuk berikut dari
subdomain.mydomain.com
, maka cookie tidak akan dikirim untuk permintaan kemydomain.com
:Namun jika Anda menggunakan yang berikut ini, itu akan dapat digunakan di kedua domain:
Cookie ini akan dikirim untuk setiap subdomain dari mydomain.com, termasuk subdomain bersarang seperti
subsub.subdomain.mydomain.com
.Di RFC 2109 , domain tanpa titik awal berarti bahwa itu tidak dapat digunakan pada subdomain, dan hanya titik terkemuka (
.mydomain.com
) yang akan memungkinkannya untuk digunakan di beberapa subdomain (tetapi bukan domain tingkat atas, jadi yang Anda tanyakan adalah tidak mungkin di spec yang lebih lama).Namun, semua browser modern menghormati spesifikasi RFC 6265 yang lebih baru , dan akan mengabaikan titik awal apa pun, artinya Anda dapat menggunakan cookie pada subdomain dan juga domain tingkat atas.
Singkatnya, jika Anda menetapkan cookie seperti contoh kedua di atas
mydomain.com
, cookie dapat diakses olehsubdomain.mydomain.com
, dan sebaliknya. Ini juga dapat digunakan untuk mengizinkansub1.mydomain.com
dansub2.mydomain.com
berbagi cookie.Lihat juga:
sumber
domain=.mydomain.com
tidak berlaku untuk mydomain.com kosong, sehingga dua RFC tidak kompatibel satu sama lain.Saya tidak yakin jawaban @cmbuckley menunjukkan gambar penuh Yang saya baca adalah:
Juga
Bagi saya itu berarti Anda dapat melindungi cookie agar tidak dibaca oleh subdomain / domain tetapi tidak dapat mencegah penulisan cookie ke domain lain. Jadi seseorang dapat menulis ulang cookie situs Anda dengan mengendalikan subdomain lain yang dikunjungi oleh browser yang sama. Yang mungkin bukan masalah besar.
Situs uji cookie luar biasa yang disediakan oleh @cmbuckley / untuk mereka yang melewatkannya dalam jawabannya seperti saya; layak bergulir ke atas dan ke atas /:
sumber
domain
, cookie hanya digunakan untuk host permintaan. Ini berarti bahwaSet-Cookie: name=value
darimydomain.com
tidak akan dikirim dengan permintaan ke subdomain. Selamat bermain dengan skrip tes ini juga.Berikut adalah contoh menggunakan API cookie DOM ( https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie ), sehingga kita dapat melihat sendiri perilaku tersebut.
Jika kami menjalankan JavaScript berikut:
Tampaknya sama dengan mengeksekusi:
Kunci cookie tersedia (hanya) di domain mydomain.com .
Sekarang, jika Anda menjalankan JavaScript berikut di mydomain.com:
Kunci cookie tersedia untuk mydomain.com dan juga subdomain.mydomain.com .
Terakhir, jika Anda mencoba dan menjalankan yang berikut di subdomain.mydomain.com:
Apakah kunci cookie tersedia untuk subdomain.mydomain.com ? Saya sedikit terkejut bahwa ini diperbolehkan; Saya menduga itu akan menjadi pelanggaran keamanan bagi subdomain untuk dapat mengatur cookie pada domain induk.
sumber
httponly
cookie versus jenis cookie yang Anda buat.domain
atribut menyebabkan cookie berfungsi di subdomain; tidak ada atribut yang tidak). Titik-titik terkemuka diabaikan paling baik dan paling aktif diblokir.Harap semua orang perhatikan bahwa Anda dapat mengatur cookie dari subdomain pada domain.
(dikirim sebagai respons untuk meminta
subdomain.mydomain.com
)Tetapi Anda TIDAK BISA mengatur cookie dari domain pada subdomain.
(dikirim sebagai respons untuk meminta
mydomain.com
)MENGAPA?
Menurut spesifikasi RFC 6265 bagian 5.3.6 Model Penyimpanan
dan RFC 6265 bagian 5.1.3 Pencocokan Domain
Jadi "subdomain.mydomain.com" cocok dengan domain "mydomain.com", tetapi "mydomain.com" TIDAK cocok dengan domain "subdomain.mydomain.com"
Periksa jawaban ini juga.
sumber
Dalam kedua kasus ya itu bisa, dan ini adalah perilaku default untuk IE dan Edge.
Jawaban lainnya menambah wawasan yang berharga tetapi terutama menggambarkan perilaku di Chrome. Penting untuk dicatat bahwa perilakunya sangat berbeda di IE. Skrip pengujian CMBuckley yang sangat membantu menunjukkan bahwa di (katakanlah) Chrome, cookie tidak dibagi antara root dan subdomain ketika tidak ada domain yang ditentukan. Namun tes yang sama di IE menunjukkan bahwa mereka dibagikan. Kasing IE ini lebih dekat dengan deskripsi take-home di tautan CMBuckley www-atau-tidak-www. Saya tahu ini masalahnya karena kami memiliki sistem yang menggunakan cookie servicestack yang berbeda pada root dan subdomain. Semuanya bekerja dengan baik sampai seseorang mengaksesnya di IE dan dua sistem memperebutkan cookie sesi siapa yang akan menang sampai kita meledakkan cache.
sumber
Hati-hati jika Anda bekerja di localhost! Jika Anda menyimpan cookie Anda di js seperti ini:
Mungkin tidak dapat diakses ke subdomain Anda, seperti
sub.localhost
. Untuk mengatasi masalah ini, Anda perlu menggunakan Virtual Host . Sebagai contoh, Anda dapat mengonfigurasi host virtual Anda denganServerName
localhost.com
maka Anda akan dapat menyimpan cookie Anda di domain dan subdomain Anda seperti ini:sumber
Solusi sederhana
Parameter ke-5 Setcookie menentukan (sub) domain tempat cookie tersedia. Menetapkannya ke (EXAMPLE.COM) membuatnya tersedia untuk subdomain apa pun (misalnya: SUBDOMAIN.EXAMPLE.COM)
Referensi: http://php.net/manual/en/function.setcookie.php
sumber