Jak działają domeny cookie przeglądarki?
Z powodu dziwnych problemów z plikami cookie domeny/subdomeny, które dostaję, chciałbym wiedzieć, jak przeglądarki obsługują pliki cookie. Jeśli robią to na różne sposoby, byłoby również miło poznać różnice.
Innymi słowy-gdy przeglądarka otrzymuje plik cookie, plik ten może mieć domenę i ścieżkę dołączoną do niego. Lub nie, w takim przypadku przeglądarka prawdopodobnie zastępuje niektóre domyślne dla nich. Pytanie 1: Co to jest?
Później, gdy przeglądarka ma złożyć żądanie, to sprawdza 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ą zasady dopasowywania?
Dodano: Pytam o to, bo interesują mnie pewne sprawy. Like:
- Czy plik cookie dla
- czy plik cookie dla
example.com
będzie dostępny dlawww.example.com
?
Czy plik cookie dla - Czy
www.example.com
będzie w stanie ustawić plik cookie dlaexample.com
? - Czy {[1] } będzie w stanie ustawić plik cookie dla
www2.example.com
? - Czy {[1] } będzie w stanie ustawić plik cookie dla
.com
? - itd.
.example.com
będzie dostępny dla www.example.com
?
Czy plik cookie dla .example.com
będzie dostępny dla example.com
?
example.com
będzie dostępny dla anotherexample.com
?
Dodano 2:
Może ktoś zasugerować Jak ustawić ciasteczko tak aby:
- może być ustawiony przez
www.example.com
lubexample.com
; - jest dostępny zarówno przez
www.example.com
, jak iexample.com
.
8 answers
Chociaż istnieje RFC 2965 (Set-Cookie2
, już przestarzały RFC 2109), że powinien zdefiniować plik cookie w dzisiejszych czasach większość przeglądarek nie obsługuje tego w pełni, ale po prostu przestrzega oryginalnej specyfikacji Netscape.
Istnieje rozróżnienie pomiędzy domeną a efektywną domeną: pierwsza jest pobierana z pola nagłówka Set-Cookie
, a druga jest interpretacją tej wartości atrybutu. Według w RFC 2965 należy zastosować:
- jeśli pole nagłówka Set-Cookie nie ma atrybutu domeny , efektywna domena jest domeną żądania.
- jeśli istnieje atrybut Domain , jego wartość zostanie użyta jako efektywna domena (jeśli wartość nie zaczyna się od
.
zostanie dodana przez Klienta).
Mając efektywną domenę musi również domena-dopasować bieżący żądana domena do Ustawienia; w przeciwnym razie plik cookie zostanie zmieniony. Ta sama zasada dotyczy wyboru plików cookie, które mają zostać wysłane w żądaniu.
Mapowanie tej wiedzy na twoje pytania, powinno mieć zastosowanie:
- ciasteczko z
Domain=.example.com
czy będzie dostępna dla www.example.com - ciasteczko z
Domain=.example.com
czy będzie dostępna dla example.com - plik Cookie z
Domain=example.com
zostanie przekonwertowany na.example.com
i w ten sposób czy będzie również dostępna dla www.example.com - plik Cookie z
Domain=example.com
będzie nie będzie Dostępny dla anotherexample.com - www.example.com czy będzie można ustawić plik cookie dla example.com
- www.example.com czy Nie będzie można ustawić plik cookie dla www2.example.com
- www.example.com czy Nie będzie można ustawić plik cookie dla .com
I ustawić i odczytać plik cookie dla/by www.example.com i example.com, ustaw odpowiednio na .www.example.com
i .example.com
. Ale pierwsza (.www.example.com
) będzie dostępna tylko dla innych domen poniżej tej domeny (np. foo.www.example.com lub bar.www.example.com) gdzie .example.com
może być również dostępna przez dowolną inną domenę poniżej example.com (np. foo.example.com lub bar.example.com).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-13 20:30:41
Poprzednie odpowiedzi są trochę nieaktualne.
RFC 6265 został opublikowany w 2011 roku, na podstawie ówczesnego konsensusu przeglądarki. Od tego czasu pojawiły się pewne komplikacje związane z domenami przyrostków publicznych. Napisałem artykuł wyjaśniający obecną sytuację - http://bayou.io/draft/cookie.domain.html
Podsumowując, zasady, których należy przestrzegać w odniesieniu do domeny cookie:
Domena wyjściowa pliku cookie jest domeną zapytanie ofertowe.
Jeśli domena źródłowa jest adresem 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 wyjściowej.
-
Jeśli plik cookie ma atrybut domeny, to]}
- Plik cookie ma zastosowanie do tej domeny i wszystkich jej subdomen.]}
Domena pliku cookie musi być taka sama, jak domena macierzysta.]}
- the domena cookie nie może być domeną TLD, przyrostkiem publicznym ani rodzicem przyrostka publicznego.
Można wywnioskować, że plik cookie zawsze ma zastosowanie do jego domeny wyjściowej.
Domena cookie nie powinna mieć wiodącej kropki, jak w .foo.com
- wystarczy użyć foo.com
Jako przykład,
-
x.y.z.com
może ustawić domenę cookie dla siebie lub rodziców -x.y.z.com
,y.z.com
,z.com
. Ale niecom
, który jest publicznym przyrostkiem. - plik cookie z domeną =
y.z.com
jest dotyczyy.z.com
,x.y.z.com
,a.x.y.z.com
itd.
Przykłady sufiksów publicznych - com
, edu
, uk
, co.uk
, blogspot.com
, compute.amazonaws.com
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-05 22:14:34
Aby uzyskać obszerny przegląd zawartości RFC2965 . Oczywiście nie musi to oznaczać, że wszystkie przeglądarki zachowują się dokładnie tak samo.
Ogólnie jednak regułą dla domyślnej ścieżki, jeśli żadna nie została określona w pliku cookie, jest ścieżka w adresie URL, z którego pochodzi nagłówek Set-Cookie. Podobnie domyślną dla domeny jest pełna nazwa hosta w adresie URL, z którego pochodzi plik cookie Set.
Zasady dopasowywania domeny wymagają dopasowania domeny cookie gospodarza, do którego wniosek jest składany. Plik cookie może określić szersze dopasowanie domeny za pomocą include *. w atrybucie domeny Set-Cookie (ten jeden obszar, który 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ę wewnątrz ścieżki określonej w pliku cookie. Zazwyczaj pliki cookie sesji są ustawiane za pomocą Path = / lub path= / applicationName/, więc plik cookie jest dostępny dla wszystkich żądań w podanie.
odpowiedź na dodane:
- czy ciasteczko dla .example.com być dostępne dla www.example.com Tak
- czy ciasteczko dla .example.com być dostępne dla example.com Nie wiem
- czy ciasteczko dla example.com być dostępne dla www.example.com nie powinno, ale... *
- czy ciasteczko dla example.com być dostępne dla anotherexample.com? Nie
- Will www.example.com możliwość ustawienia pliku cookie dla example.com Tak
- Will www.example.com możliwość ustawienia pliku cookie dla www2.example.com? Nie (Z Wyjątkiem via .example.com)
- Will www.example.com być w stanie ustawić plik cookie dla. com? Nie (nie można ustawić pliku cookie tak wysoko w przestrzeni nazw, ani nie można ustawić go dla czegoś takiego .co.uk).
*
nie jestem w stanie tego teraz przetestować, ale mam przeczucie, że przynajmniej IE7/6 potraktowałby ścieżka example.com
jakby była .example.com
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-30 12:56:05
Ostatnim (trzecim dokładnie) RFC dla tego problemu jest RFC-6265 (Obsoletes RFC-2965, który z kolei obsoletes RFC-2109).
Gdy atrybut domeny zostanie określony, będzie on traktowany jako pełna nazwa domeny (jeśli w atrybucie znajduje się kropka, zostanie ona zignorowana). Serwer powinien pasować do domeny podanej w atrybutie (mieć dokładnie tę samą nazwę domeny lub być jej subdomeną), aby uzyskać ten plik cookie. Dokładniej to określone tutaj .
Więc, na przykład:
- atrybut cookie
Domain=.example.com
jest odpowiednikiemDomain=example.com
- pliki cookie z takimi atrybutami domeny będą Dostępne dla example.com i www.example.com
- pliki cookie z takimi atrybutami domeny będą niedostępne dla another-example.com
- podanie atrybutu cookie jak
Domain=www.example.com
zamknie drogę dla www4.example.com
PS: końcowy przecinek w atrybucie domeny spowoduje, że agent użytkownika zignoruje atrybut =(
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-12 15:08:50
Istnieją reguły, które określają, czy przeglądarka będzie akceptować nagłówek odpowiedzi Set-header (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, które określają, 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. Kilka empirycznych dowodów można znaleźć w artykule Jak różne przeglądarki inaczej obsługują pliki cookie
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-10 15:47:57
RFC nie odzwierciedlają rzeczywistości.
Better check draft-ietf-httpstate-cookie, work in progress.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-07 15:01:20
Byłem zaskoczony przeczytaniem sekcji 3.3.2 o odrzucaniu plików cookie:
Http://tools.ietf.org/html/rfc2965
Mówi, że przeglądarka powinna odrzucić plik cookie z x.y.z.com z domeną .z.com, ponieważ "x. y" zawiera kropkę. Tak więc, chyba że źle interpretuję RFC i / lub pytania powyżej, mogą być pytania dodane:
Czy ciasteczko dla .example.com być dostępne dla www.yyy.example.com Nie.
Czy plik cookie ustawiony przez serwer origin www.yyy.example.com, z domeną .example.com, czy jego wartość jest wysyłana przez agenta użytkownika do xxx.example.com Nie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-04 21:46:40
Czy
www.example.com
będzie w stanie ustawić plik cookie dla.com
?
Nie, ale example.com.fr
może być w stanie ustawić plik cookie dla example2.com.fr
. Firefox chroni przed tym, utrzymując listę TLD: http://securitylabs.websense.com/content/Blogs/3108.aspx
Najwyraźniej Internet Explorer nie pozwala dwuliterowym domenom na ustawianie plików cookie, co zapewne wyjaśnia, dlaczego o2.ie
po prostu przekierowuje na o2online.ie
. Często się nad tym zastanawiałem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-07 14:16:15