Czym są pliki cookie

Plik cookie to fragment danych zapisywanych w przeglądarce, który służy do przechowywania stanu i innych informacji, których strona internetowa potrzebuje do wykonywania swoich funkcji.

Plik cookie to niewielki plik, który witryny przechowują na komputerach użytkowników. 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 plik cookie jest używany. Te atrybuty służą do ustawiania dat ważności lub wskazywania, ż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 dostępnych metod dodawania trwałego stanu do witryn internetowych. Z upływem czasu ich możliwości się zwiększały i ulepszały, ale platforma miała też pewne problemy z przeszłością. Aby temu zaradzić, przeglądarki (w tym Chrome, Firefox i Edge) zmieniają swoje działanie, aby narzucić domyślne ustawienia, które lepiej chronią prywatność.

Pliki cookie w praktyce

Załóżmy, że prowadzisz bloga, na którym chcesz wyświetlać użytkownikom promocję „Co nowego”. Użytkownicy mogą zamknąć promocję, a potem nie zobaczą jej przez jakiś czas. To ustawienie można zapisać w pliku cookie, ustawić jego ważność po miesiącu (2 600 000 sekund) i wysyłać je tylko przez HTTPS. Taki nagłówek będzie wyglądał tak:

Set-Cookie: promo_shown=1; Max-Age=2600000; Secure
3 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, czyli korzysta z bezpiecznego połączenia, a plik cookie ma niecały miesiąc, przeglądarka wyśle w swoim żądaniu ten nagłówek:

Cookie: promo_shown=1
3 pliki cookie wysyłane z przeglądarki na serwer w ramach żądania
Przeglądarka wysyła pliki cookie z powrotem w nagłówku Cookie.

Możesz też dodać i odczytać dostępne w tej witrynie pliki cookie za pomocą JavaScriptu za pomocą polecenia document.cookie. Przypisanie do document.cookie spowoduje utworzenie lub zastąpienie pliku cookie z tym kluczem. W konsoli JavaScript w przeglądarce możesz na przykład spróbować wykonać te czynności:

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

Wywołanie funkcji document.cookie spowoduje wyświetlenie wszystkich plików cookie dostępnych w bieżącym kontekście, z każdym plikiem oddzielonym średnikiem:

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

Jeśli wybierzesz tę opcję na kilku popularnych stronach, zauważysz, że większość z nich ustawia znacznie więcej niż 3 pliki cookie. W większości przypadków pliki cookie są wysyłane przy każdym żądaniu wysyłanym do tej domeny, co ma pewne konsekwencje. Przepustowość przesyłania jest często bardziej ograniczona niż pobierania dla użytkowników, więc narzut na wszystkie wychodzące żądania zwiększa czas do pierwszego bajta. Nie przesadzaj z liczbą i rozmiarem plików cookie. Użyj atrybutu Max-Age, aby pliki cookie nie były przechowywane dłużej, niż jest to konieczne.

Co to są własne i zewnętrzne pliki cookie?

Po powrocie do listy przeglądanych wcześniej witryn prawdopodobnie zauważysz, że pliki cookie są dostępne dla 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 wyświetla się na pasku adresu przeglądarki, są nazywane własnymi. Podobnie pliki cookie z domen innych niż bieżąca witryna są nazywane plikami cookie innych firm. Nie jest to absolutna etykieta, ale etykieta względna do kontekstu użytkownika. Ten sam plik cookie może być własny lub zewnętrzny w zależności od tego, w której witrynie znajduje się użytkownik.

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

Wracając do przykładu z powyżej, załóżmy, że jeden z Twoich postów na blogu zawiera zdjęcie wyjątkowo pięknego kota, które jest hostowane 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ł Twój blog 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 wyświetlenia obrazu. Nie jest to szczególnie przydatne, ponieważ promo_shown nie jest używane do niczego w witrynie tej osoby, tylko zwiększa obciążenie żądania.

Jeśli jest to niezamierzony efekt, dlaczego chcesz to zrobić? Ten mechanizm umożliwia witrynom utrzymanie ich stanu, gdy są używane w kontekście osób trzecich. Jeśli na przykład osadzisz w witrynie film z YouTube, użytkownicy zobaczą w odtwarzaczu opcję „Obejrzyj później”. Jeśli użytkownik jest już zalogowany w YouTube, sesja ta jest udostępniana w odtwarzaczu umieszczonym na stronie zewnętrznej przez plik cookie innej firmy. Oznacza to, że przycisk „Do obejrzenia” zapisze film za jednym razem, zamiast zachęcać go do zalogowania się lub przejścia z jego strony i powrotu do YouTube.

Ten sam plik cookie jest wysyłany w trzech różnych kontekstach
Plik cookie w kontekście zewnętrznym jest wysyłany podczas odwiedzania różnych stron.

Jedną z właściwości kulturowych internetu jest to, że jest on domyślnie otwarty. To właśnie dzięki temu wielu osobom udało się tworzyć własne treści i aplikacje. Wywołało to jednak też wiele obaw związanych z bezpieczeństwem i prywatnością. Ataki polegające na sfałszowaniu żądań między witrynami (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 inicjuje. Jeśli na przykład wejdziesz na stronę evil.example, może ona wywoływać żądania wysyłane do witryny your-blog.example, a Twoja przeglądarka chętnie dołączy powiązane z nią pliki cookie. Jeśli Twój blog nie sprawdza, w jaki sposób weryfikuje te żądania, evil.example może wywołać działania takie jak usuwanie postów lub dodawanie własnych treści.

Użytkownicy zaczynają też lepiej wykorzystywać pliki cookie do śledzenia swojej aktywności w wielu witrynach. Do tej pory nie było jednak sposobu na wyraźne określenie intencji związanej z plikiem cookie. Plik cookie promo_shown powinien być wysyłany tylko w kontekście własnym, podczas gdy plik cookie sesji dla widżetu przeznaczonego do umieszczania w innych witrynach jest tam celowo, aby udostępniać stan zalogowania w kontekście innych firm.

Możesz wyraźnie określić swój zamiar za pomocą pliku cookie, ustawiając odpowiedni atrybut SameSite.

Aby zidentyfikować własne pliki cookie i ustawić odpowiednie atrybuty, zapoznaj się z artykułem Receptury dotyczące własnych plików cookie.