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.
localStoragenie jest automatycznie wysyłany do serwera i jest zawsze dostępny dla JS — inne zastosowanie, inny model bezpieczeństwa. - Brak flagi
HttpOnlyna 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.