Czym są pliki cookie

Plik cookie to fragment danych przechowywany w przeglądarce, który służy do utrwalania stanu i innych informacji potrzebnych stronie internetowej do wykonywania funkcji.

Plik cookie to niewielki plik, który witryny zapisują na komputerze użytkownika. Przechowywane w nim informacje są przesyłane między przeglądarką a witryną.

Każdy plik cookie to para klucz-wartość wraz z liczbą atrybutów, które określają, kiedy i gdzie ten plik cookie jest używany. Te atrybuty służą do ustawiania takich parametrów jak daty ważności lub wskazanie, że plik cookie powinien być wysyłany tylko przez HTTPS. Plik cookie możesz ustawić w nagłówku HTTP lub za pomocą interfejsu JavaScript.

Pliki cookie to jedna z metod dodawania do witryn stanu trwałego. Z biegiem lat ich możliwości rosły i ewoluowały, ale na platformie pozostały pewne problematyczne starsze funkcje. Aby temu zapobiec, przeglądarki (w tym Chrome, Firefox i Edge) zmieniają swoje działanie, aby wymuszać domyślne ustawienia lepiej chroniące prywatność.

Pliki cookie w akcji

Załóżmy, że masz bloga, na którym chcesz wyświetlać użytkownikom promocję „Co nowego”. Użytkownicy mogą odrzucić promocję i przez pewien czas nie będą jej widzieć. Możesz zapisać te ustawienia w pliku cookie, ustawić jego wygaśnięcie za miesiąc (2 600 000 sekund) i wysyłać go tylko przez HTTPS. Nagłówek będzie wyglądał tak:

Set-Cookie: promo_shown=1; Max-Age=2600000; Secure
Trzy pliki cookie wysyłane do przeglądarki z serwera w odpowiedzi
Serwery ustawiają pliki cookie za pomocą nagłówka Set-Cookie.

Gdy czytelnik wyświetli stronę, która spełnia te wymagania (korzysta z bezpiecznego połączenia, a plik cookie ma mniej niż miesiąc), przeglądarka wyśle w żądaniu ten nagłówek:

Cookie: promo_shown=1
Trzy pliki cookie wysyłane z przeglądarki do serwera w żądaniu
Przeglądarka odsyła pliki cookie w nagłówku Cookie.

Możesz też dodawać i odczytywać pliki cookie dostępne dla danej witryny w JavaScript za pomocą funkcji document.cookie. Przypisanie do document.cookie spowoduje utworzenie lub zastąpienie pliku cookie tym kluczem. Możesz na przykład wypróbować w konsoli JavaScript przeglądarki te polecenia:

→ document.cookie = "promo_shown=1; Max-Age=2600000; Secure"
← "promo_shown=1; Max-Age=2600000; Secure"

Odczytanie document.cookie spowoduje wyświetlenie wszystkich plików cookie dostępnych w bieżącym kontekście, a każdy z nich będzie oddzielony średnikiem:

→ document.cookie;
← "promo_shown=1; color_theme=peachpuff; sidebar_loc=left"
JavaScript uzyskujący dostęp do plików cookie w przeglądarce
JavaScript może uzyskiwać dostęp do plików cookie za pomocą document.cookie.

Jeśli spróbujesz to zrobić w przypadku kilku popularnych witryn, zauważysz, że większość z nich ustawia znacznie więcej niż tylko 3 pliki cookie. W większości przypadków te pliki cookie są wysyłane w każdym żądaniu do tej domeny, co ma wiele konsekwencji. Przepustowość przesyłania jest często bardziej ograniczona niż przepustowość pobierania, więc obciążenie wszystkich żądań wychodzących powoduje opóźnienie czasu do pierwszego bajtu. Ustawiaj niewielką liczbę plików cookie o małym rozmiarze. Używaj atrybutu Max-Age, aby mieć pewność, że pliki cookie nie będą przechowywane dłużej niż to konieczne.

Czym są pliki cookie własne i innych firm?

Jeśli wrócisz do tej samej grupy witryn, które były wcześniej otwarte, prawdopodobnie zauważysz, że pliki cookie są obecne w przypadku różnych domen, a nie tylko tej, którą aktualnie odwiedzasz. Pliki cookie, które pasują do domeny bieżącej witryny, czyli do tego, co jest wyświetlane na pasku adresu przeglądarki, są nazywane plikami własnymi. Podobnie pliki cookie z domen innych niż bieżąca witryna są nazywane plikami cookie innych firm. Nie jest to etykieta bezwzględna, ale względna w stosunku do kontekstu użytkownika. Ten sam plik cookie może być plikiem własnym lub plikiem innej firmy w zależności od tego, w której witrynie użytkownik się w danym momencie znajduje.

Trzy pliki cookie wysyłane do przeglądarki w ramach różnych żądań na tej samej stronie
Pliki cookie mogą pochodzić z różnych domen na jednej stronie.

Wracając do wcześniejszego przykładu, załóżmy, że jeden z Twoich postów na blogu zawiera zdjęcie wyjątkowo uroczego kota i jest hostowany pod adresem /blog/img/amazing-cat.png. Ponieważ jest to niesamowity obraz, inna osoba używa go bezpośrednio w swojej witrynie. Jeśli użytkownik odwiedził Twojego bloga i ma plik cookie promo_shown, to gdy wyświetli amazing-cat.png w witrynie innej osoby, ten plik cookie zostanie wysłany w żądaniu obrazu. Nie jest to szczególnie przydatne, ponieważ promo_shown nie jest używane w witrynie tej osoby, a jedynie zwiększa obciążenie żądania.

Jeśli jest to niezamierzony efekt, dlaczego chcesz to zrobić? To ten mechanizm umożliwia witrynom zachowanie stanu, gdy są używane w kontekście zewnętrznym. Jeśli na przykład umieścisz w witrynie film na YouTube, odwiedzający zobaczą w odtwarzaczu opcję „Do obejrzenia”. Jeśli użytkownik jest już zalogowany w YouTube, sesja jest udostępniana w odtwarzaczu osadzonym przez plik cookie innej firmy. Oznacza to, że przycisk „Do obejrzenia” zapisze film od razu, zamiast prosić użytkownika o zalogowanie się lub przekierowywać go ze strony do YouTube.

Ten sam plik cookie wysyłany w 3 różnych kontekstach
Plik cookie w kontekście innej firmy jest wysyłany podczas odwiedzania różnych stron.

Jedną z cech internetu jest to, że domyślnie jest on otwarty. Dzięki temu tak wiele osób może tworzyć własne treści i aplikacje. Wiążą się z tym jednak pewne obawy dotyczące bezpieczeństwa i kwestie dotyczące prywatności. Ataki typu cross-site request forgery (CSRF) wykorzystują fakt, że pliki cookie są dołączane do każdego żądania wysyłanego do danego źródła, niezależnie od tego, kto je zainicjował. Jeśli na przykład odwiedzisz witrynę evil.example, może to spowodować wysłanie żądań do your-blog.example, a przeglądarka bez problemu dołączy powiązane z nimi pliki cookie. Jeśli Twój blog nie będzie ostrożny w sprawdzaniu tych żądań, evil.example może wywołać działania takie jak usuwanie postów czy dodawanie własnych treści.

Użytkownicy są też coraz bardziej świadomi tego, jak pliki cookie mogą być wykorzystywane do śledzenia ich aktywności w wielu witrynach. Do tej pory nie było jednak możliwości wyraźnego określenia intencji związanej z plikiem cookie. Twój promo_shown plik cookie powinien być wysyłany tylko w kontekście własnym, natomiast plik cookie sesji widżetu przeznaczonego do osadzania w innych witrynach jest celowo używany do przekazywania stanu zalogowania w kontekście strony trzeciej.

Możesz wyraźnie określić swoje intencje dotyczące pliku cookie, ustawiając odpowiedni atrybut SameSite.

Aby zidentyfikować własne pliki cookie i ustawić odpowiednie atrybuty, zapoznaj się z artykułem Przepisy na własne pliki cookie.