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 .example.com będzie dostępny dla www.example.com? Czy plik cookie dla .example.com będzie dostępny dla example.com?
  • czy plik cookie dla example.com będzie dostępny dla www.example.com?
  • Czy plik cookie dla example.com będzie dostępny dla anotherexample.com?
  • Czy www.example.com będzie w stanie ustawić plik cookie dla example.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.

Dodano 2:

Może ktoś zasugerować Jak ustawić ciasteczko tak aby:

  • może być ustawiony przez www.example.com lub example.com;
  • jest dostępny zarówno przez www.example.com, jak i example.com.
Author: Vilx-, 2009-06-30

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).

 309
Author: Gumbo,
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 nie com, który jest publicznym przyrostkiem.
  • plik cookie z domeną = y.z.com jest dotyczy y.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

 81
Author: ZhongYu,
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.

 6
Author: AnthonyWJones,
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).

Zgodnie z nim {[7] } jeśli serwer pomija atrybut domeny, user agent zwróci plik cookie tylko do serwera origin (serwera, na którym znajduje się dany zasób). Ale jest to również Ostrzeżenie że niektórzy obecni agenci użytkownika traktują nieobecny atrybut domeny tak, jakby atrybut domeny był obecny i zawierał bieżącą nazwę hosta (Na przykład, jeśli example.com zwraca nagłówek Set-Cookie bez atrybutu domeny, agenci użytkownika błędnie wyślą plik cookie do www.example.com również).

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 odpowiednikiem Domain=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 =(

 4
Author: Victor Akimov,
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

 3
Author: Gert-Jan Strik,
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.

 2
Author: Julian Reschke,
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.

 2
Author: user100034,
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.

 1
Author: TRiG,
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