Dwa lata w żądaniu, siedem dni w praktyce
Spis treści
Nagłówek ciasteczka to prośba, a nie polecenie. Max-Age=63072000 prosi o dwa lata, a to, co przeglądarka przyzna, zależy od czegoś, czego w nagłówku w ogóle nie ma: od tego, jak ciasteczko powstało. Ten sam wiersz daje raz dwa lata, a raz siedem dni, i nic w odpowiedzi nie mówi, który przypadek zachodzi.
Różnica sięga dalej niż porządek. Powracający odwiedzający powraca tylko tak długo, jak istnieje ciasteczko, które go rozpoznaje; gdy zniknie, liczy się jako nowy, a każde okno dłuższe niż życie ciasteczka liczy na danych, których już nie ma.

Trzy obcięcia
Safari skraca każde ciasteczko zapisane przez document.cookie do siedmiu dni. To reguła o największym skutku praktycznym, bo większość ciasteczek pomiarowych powstaje właśnie tak – przez tag działający w stronie.
Te same siedem dni Safari stosuje do ciasteczek przychodzących w odpowiedzi HTTP z hosta, który przez CNAME rozwiązuje się gdzie indziej. Chodzi o układ, w którym subdomena witryny wskazuje na dostawcę pomiarów; skutkiem jest to, że poprawnie ustawione ciasteczko własne traktowane jest jak obce.
Chrome i Firefox obcinają przy 400 dniach. Ta liczba rzadko boli – leży powyżej każdego rozsądnego okna pomiarowego – ale po cichu kończy dwuletnie ciasteczko, które tkwi w szablonie tagu od 2018 roku.
Dlaczego rozstrzyga droga, a nie atrybut
Dwa ciasteczka o identycznych atrybutach mogą mieć różny czas życia, a jedyną różnicą jest to, kto je zapisał. Ciasteczko ustawione przez skrypt w stronie zostaje skrócone; to samo ciasteczko w odpowiedzi własnego serwera nie.
Dlatego przeniesienie ciasteczka do odpowiedzi jest najskuteczniejszą pojedynczą zmianą: kosztuje jeden punkt końcowy na własnej domenie i stanowi różnicę między tygodniem rozpoznawania a rokiem. Tag wtedy ciasteczko czyta, zamiast je zapisywać.
Przenosiny mają drugi skutek wart wzmianki: ciasteczko zapisane w odpowiedzi może nieść HttpOnly, a ciasteczka z HttpOnly nie odczyta żaden skrypt strony – także żaden z tych, których nikt tam świadomie nie umieścił.
Co zmienia w tym CNAME
Subdomena wskazująca na dostawcę wygląda w pasku adresu na własną, a dla przeglądarki jest przezroczysta: łańcuch rozwiązywania leży otworem, a przeglądarka widzi, że host kończy się gdzie indziej. Właśnie tam zaczepia obrona.
Skutek warto zaplanować, zamiast go odkrywać: układ zbudowany po to, by uciec przed ograniczeniami dla podmiotów trzecich, dziedziczy w Safari obcięcie do siedmiu dni, a w zamian zyskuje subdomenę, której awaria zabiera ze sobą cały pomiar. Gdy punkt końcowy działa na własnej infrastrukturze, nie zachodzi ani jedno, ani drugie.
Atrybuty, na których ciasteczko przepada
| Zapisane tak | Co się dzieje |
|---|---|
SameSite=None bez Secure |
Odrzucane wprost przez każdą bieżącą przeglądarkę – ciasteczko nigdy nie zostaje zapisane. |
Zupełny brak SameSite |
Traktowane jak Lax, ciasteczka brakuje przy zapytaniach z obcych witryn. |
__Host- z Domain |
Odrzucone: przedrostek zabrania Domain i wymaga Secure oraz Path=/. |
| Nazwa i wartość powyżej 4096 bajtów | Odrzucane bez słowa – tak przestaje docierać rozrośnięty ciąg zgody. |
Max-Age i Expires razem |
Wygrywa Max-Age. Expires jest tylko dla przeglądarek, których nikt już nie ma. |
Wszystkie przepadają w ten sam sposób: odpowiedź jest w porządku, a ciasteczka po prostu potem nie ma. Jedyną wiarygodną kontrolą jest spojrzenie na to, co przeglądarka zapisała, a nie na to, co zostało wysłane.
Co z tego wynika dla pomiaru
Siedmiodniowe ciasteczko zamienia odwiedzającego wracającego po ośmiu dniach w nowego. W raporcie widać to jako udział powracających niższy w Safari niż wszędzie indziej i jako ścieżki konwersji krótsze niż cykl sprzedaży – nie dlatego, że podróż była krótka, lecz dlatego, że jej wcześniejsza część już do niej nie należy.
Tam, gdzie ciasteczka nie da się wydłużyć, uczciwą odpowiedzią jest skrócenie okna, a nie dalsze podawanie takiego, którego dane nie udźwigną. Trzydziestodniowe okno atrybucji nad siedmiodniowym ciasteczkiem opisuje okres, którego przeglądarka nie pamięta, a każda wyprowadzona z niego liczba dziedziczy tę lukę.