Z powodu dziwnych problemów z plikami cookie domeny / subdomeny, które dostaję, chciałbym wiedzieć, w jaki sposób przeglądarki obsługują pliki cookie. Jeśli robią to na różne sposoby, dobrze byłoby poznać różnice.
Innymi słowy - gdy przeglądarka otrzyma plik cookie, plik cookie MUSI mieć domenę i ścieżkę do niej dołączoną. Lub nie, w którym to przypadku przeglądarka prawdopodobnie zastępuje niektóre ustawienia domyślne. Pytanie 1: czym one są?
Później, gdy przeglądarka ma zamiar wysłać żądanie, sprawdza swoje pliki cookie i odfiltrowuje te, które powinien wysłać dla tego żądania. Robi to, dopasowując je do ścieżki żądań i domeny. Pytanie 2: jakie są reguły dopasowania?
Dodany:
Pytam o to, ponieważ jestem zainteresowany niektórymi przypadkowymi przypadkami. Lubić:
- Czy
.example.com
będzie dostępny plik cookiewww.example.com
? - Czy
.example.com
będzie dostępny plik cookieexample.com
? - Czy
example.com
będzie dostępny plik cookiewww.example.com
? - Czy
example.com
będzie dostępny plik cookieanotherexample.com
? - Będzie
www.example.com
będzie można ustawić ciasteczkoexample.com
? - Będzie
www.example.com
mógł ustawić ciasteczko dlawww2.example.com
? - Będzie
www.example.com
mógł ustawić ciasteczko dla.com
? - Itp.
Dodano 2:
Czy ktoś mógłby zasugerować, jak ustawić ciasteczko, aby:
- Można to ustawić za pomocą
www.example.com
lubexample.com
; - Jest dostępny zarówno dla, jak
www.example.com
i dlaexample.com
.
Poprzednie odpowiedzi są trochę nieaktualne.
RFC 6265 został opublikowany w 2011 roku na podstawie konsensusu przeglądarki w tym czasie. Od tego czasu wystąpiły pewne komplikacje z publicznymi domenami sufiksów. Napisałem artykuł wyjaśniający obecną sytuację - http://bayou.io/draft/cookie.domain.html
Podsumowując, należy przestrzegać zasad dotyczących domeny plików cookie:
Domeny pochodzenie pliku cookie jest domeną żądanie pochodzące.
Jeśli domeną źródłową jest adres IP, atrybut domeny pliku cookie nie może być ustawiony.
Jeśli atrybut domeny pliku cookie nie jest ustawiony, plik cookie ma zastosowanie tylko do jego domeny pochodzenia.
Jeśli ustawiony jest atrybut domeny pliku cookie,
Można wywnioskować, że plik cookie ma zawsze zastosowanie do jego domeny pochodzenia.
Domena plików cookie nie powinna mieć wiodącej kropki, jak w
.foo.com
zwykłym użyciufoo.com
Jako przykład,
x.y.z.com
Można ustawić domenę cookie siebie lub rodziców -x.y.z.com
,y.z.com
,z.com
. Ale niecom
, co jest publicznym przyrostkiem.y.z.com
dotyczyy.z.com
,x.y.z.com
,a.x.y.z.com
itd.Przykłady przyrostków publicznych -
com
,edu
,uk
,co.uk
,blogspot.com
,compute.amazonaws.com
źródło
x.y.z.com
można ustawić ciasteczkoz.com
?Aby uzyskać obszerne omówienie, przejrzyj zawartość RFC2965 . Oczywiście nie musi to oznaczać, że wszystkie przeglądarki zachowują się dokładnie tak samo.
Jednak ogólnie rzecz biorąc, reguła domyślnej ścieżki, jeśli nie jest podana w pliku cookie, jest ścieżką w adresie URL, z którego przyszedł nagłówek pliku cookie. Podobnie domyślna domena to pełna nazwa hosta w adresie URL, z którego przyszedł plik cookie Set.
Reguły dopasowania dla domeny wymagają, aby Domena plików cookie pasowała do hosta, do którego wysyłane jest żądanie. Plik cookie może określać szersze dopasowanie do domeny poprzez włączenie *. w atrybucie domeny Set-Cookie (w tym obszarze przeglądarki mogą się różnić). Dopasowanie ścieżki (zakładając, że domena pasuje) jest prostą sprawą, że żądana ścieżka musi znajdować się w ścieżce określonej w pliku cookie. Zazwyczaj sesyjne pliki cookie są ustawiane za pomocą path = / lub path = / applicationName /, więc cookie jest dostępne dla wszystkich żądań w aplikacji.
Odpowiedź na dodane:
*
Nie mogę teraz tego przetestować, ale mam wrażenie, że przynajmniej IE7 / 6 potraktowałoby ścieżkęexample.com
tak, jakby to było.example.com
.źródło
Ostatnim (dokładnie trzecim) RFC dla tego problemu jest RFC-6265 (Przestarzałe RFC-2965, które z kolei przestarza RFC-2109).
Zgodnie z nim, jeśli serwer pominie atrybut Domain, agent użytkownika zwróci plik cookie tylko do serwera źródłowego (serwera, na którym rezyduje dany zasób). Ale ostrzega również, że niektóre istniejące programy klienckie traktują nieobecny atrybut Domain tak, jakby atrybut Domain był obecny i zawierał bieżącą nazwę hosta (na przykład, jeśli example.com zwraca nagłówek Set-Cookie bez atrybutu Domain, te agenty użytkownika będą również błędnie wyślij plik cookie na www.example.com).
Po określeniu atrybutu Domain będzie on traktowany jako pełna nazwa domeny (jeśli w atrybucie jest wiodąca kropka, zostanie zignorowany). Serwer powinien pasować do domeny określonej w atrybucie (mieć dokładnie taką samą nazwę domeny lub być jej poddomeną), aby uzyskać ten plik cookie. Dokładniej to określono tutaj .
Na przykład:
Domain=.example.com
jest równoważnyDomain=example.com
Domain=www.example.com
zamknie drogę dla www4.example.comPS: przecinek końcowy w atrybucie domeny spowoduje, że agent użytkownika zignoruje atrybut = (
źródło
Testowałem wszystkie przypadki w najnowszym Chrome, Firefox, Safari w 2019 roku.
Odpowiedź na dodane:
źródło
Wiadomo, że RFC nie odzwierciedlają rzeczywistości.
Lepiej sprawdź wersję roboczą ietf-httpstate-cookie , praca w toku.
źródło
Istnieją zasady, które określają, czy przeglądarka zaakceptuje nagłówek odpowiedzi nagłówka Set (zapisywanie plików cookie po stronie serwera), nieco inne reguły / interpretacje dla zestawu plików cookie przy użyciu Javascript (nie testowałem VBScript).
Następnie istnieją reguły określające, czy przeglądarka wyśle plik cookie wraz z żądaniem strony.
Istnieją różnice między głównymi silnikami przeglądarki, w jaki sposób obsługiwane są dopasowania domen i jak interpretowane są parametry w wartościach ścieżek. Niektóre dowody empiryczne można znaleźć w artykule Jak różne przeglądarki traktują pliki cookie inaczej
źródło
Zaskoczyło mnie przeczytanie sekcji 3.3.2 na temat odrzucania plików cookie:
http://tools.ietf.org/html/rfc2965
Oznacza to, że przeglądarka powinna odrzucić plik cookie od xyzcom z domeną .z.com, ponieważ „xy” zawiera kropkę. Tak więc, chyba że źle interpretuję RFC i / lub powyższe pytania, mogą zostać dodane pytania:
Czy plik cookie dla .example.com będzie dostępny dla www.yyy.example.com? Nie.
Czy plik cookie ustawiony przez serwer pochodzenia www.yyy.example.com z domeną .example.com ma wartość przesłaną przez agenta użytkownika do xxx.example.com? Nie.
źródło
z.com
na stosowanie plików cookiez.com
i wszystkich subdomen.Nie, ale
example.com.fr
może być w stanie ustawić plik cookieexample2.com.fr
. Firefox chroni przed tym, utrzymując listę TLD: http://securitylabs.websense.com/content/Blogs/3108.aspxNajwyraźniej Internet Explorer nie zezwala domenom dwuliterowym na ustawianie plików cookie, co, jak sądzę, wyjaśnia, dlaczego
o2.ie
po prostu przekierowujeo2online.ie
. Często się nad tym zastanawiałem.źródło