Cookie

Mały plik danych zapisywany przez stronę w przeglądarce, używany do zapamiętywania sesji, logowania czy preferencji użytkownika.

Cookie (ciasteczko) to mały plik tekstowy, który strona zapisuje w Twojej przeglądarce, żeby zapamiętać coś o Tobie między żądaniami. Serwer odsyła go w nagłówku Set-Cookie, przeglądarka go przechowuje, a potem dołącza przy każdym kolejnym requeście do tej domeny w nagłówku Cookie. To sprytna łatka na fundamentalny problem: protokół HTTP jest bezstanowy — sam z siebie nie pamięta, że to znowu Ty. Bez ciasteczek po każdym kliknięciu logowałbyś się od nowa.

Do czego to służy

Najczęstsze zastosowanie to sesja i logowanie. Po zalogowaniu serwer ustawia ciasteczko z identyfikatorem sesji (np. session_id), a Ty dostajesz dostęp do swojego konta bez podawania hasła na każdej podstronie. Drugie typowe zastosowanie to preferencje — wybrany język, motyw ciemny/jasny, zawartość koszyka. Trzecie, mniej lubiane, to śledzenie i analityka — tutaj wchodzą cookies third-party i banery zgody RODO.

Ciasteczko ma nie tylko wartość, ale i atrybuty sterujące jego zachowaniem: Expires lub Max-Age (jak długo żyje — bez nich znika po zamknięciu przeglądarki, to tzw. session cookie), Domain i Path (gdzie jest wysyłane) oraz flagi bezpieczeństwa.

Przykład z praktyki

W przeglądarce odczytasz ciasteczka dostępne z poziomu JavaScriptu przez document.cookie (w konsoli DevTools). Po stronie serwera w Node.js z Express ustawisz je tak:

res.cookie('session_id', 'abc123', { httpOnly: true, secure: true, sameSite: 'lax', maxAge: 3600000 });

Flaga httpOnly sprawia, że ciasteczka nie odczyta JavaScript — to kluczowa ochrona przed kradzieżą sesji w ataku XSS. secure wysyła je tylko po HTTPS, a sameSite ogranicza wysyłanie przy żądaniach z innych domen (obrona przed CSRF).

Częste błędy i mity

  • Mit: cookies to wirusy. Nie — to zwykły tekst, nie kod wykonywalny. Mogą za to przechowywać dane, które warto chronić.
  • Trzymanie wrażliwych danych w ciasteczku w jawnej formie. Hasła czy numery kart nie mają tam czego szukać — zapisuj losowy identyfikator sesji, resztę trzymaj na serwerze.
  • Pomylenie cookies z localStorage. localStorage nie jest automatycznie wysyłany do serwera i jest zawsze dostępny dla JS — inne zastosowanie, inny model bezpieczeństwa.
  • Brak flagi HttpOnly na ciasteczku sesyjnym to klasyczny prezent dla atakującego.

Pojęcia powiązane: nagłówki Set-Cookie i Cookie, sesja HTTP, localStorage i sessionStorage, JWT, atak XSS i CSRF, flagi SameSite, Secure i HttpOnly, RODO i zgoda na cookies.