W pokazanym fragmencie kodu PHP funkcja setcookie() jest wywołana z trzema podstawowymi argumentami: nazwą ciasteczka ('egzamin'), jego wartością ('24') oraz czasem wygaśnięcia: time() + 60. Funkcja time() zwraca aktualny czas w postaci znacznika czasowego UNIX (liczba sekund od 1.01.1970). Dodanie do tego wartości 60 oznacza przesunięcie tego czasu o 60 sekund do przodu, czyli dokładnie o jedną minutę. Przeglądarka zapisuje to ciasteczko z datą wygaśnięcia ustawioną na ten przyszły moment. Po upływie tej minuty cookie jest automatycznie uznawane za nieważne i przestaje być wysyłane do serwera przy kolejnych żądaniach HTTP. W praktyce oznacza to, że to ciasteczko nadaje się np. do bardzo krótkotrwałych informacji: jednorazowy komunikat, prosty licznik, krótka flaga techniczna. Moim zdaniem lepiej jednak unikać zbyt krótkich czasów w realnych aplikacjach, bo użytkownicy potrafią się zdziwić, że coś „znika” tak szybko. Warto zapamiętać, że w setcookie() zawsze podajemy czas w sekundach jako absolutny timestamp (nie „za ile”, tylko konkretną datę w sekundach), dlatego używa się konstrukcji time() + X, gdzie X to liczba sekund. Jeśli chcemy godzinę – dajemy 60 * 60, jeśli dobę – 60 * 60 * 24, tydzień – 60 * 60 * 24 * 7 itd. To jest bardzo typowy wzorzec spotykany w dokumentacji PHP i w profesjonalnych projektach. W poważniejszych systemach stosuje się dodatkowo odpowiednie flagi (np. httponly, secure, samesite), ale logika czasu wygaśnięcia zawsze opiera się na sekundach i znaczniku czasowym. Dobrą praktyką jest też trzymanie takich wartości w stałych lub konfiguracji, żeby nie rozsiewać po kodzie „magicznych liczb” typu 60 czy 3600 bez komentarza.
Ten fragment kodu PHP jest dobrym przykładem, jak łatwo pomylić się przy interpretowaniu czasu życia ciasteczka. Wiele osób widząc wartość '24' w nazwie albo w wartości ciasteczka automatycznie kojarzy to z 24 godzinami czy 24 dobami. Tymczasem w ogóle nie ma to znaczenia dla czasu ważności. O tym, jak długo cookie będzie żyło, decyduje wyłącznie trzeci parametr funkcji setcookie(), czyli tutaj: time() + 60. Funkcja time() zwraca aktualny czas w sekundach, a liczba 60 to po prostu 60 sekund. Nie ma tu żadnej „magii” powiązanej z liczbą 24. Częsty błąd polega na tym, że ktoś myśli kategoriami: godziny, dni, a nie sekund. W PHP czas wygaśnięcia w setcookie musi być podany jako konkretny znacznik czasowy UNIX, więc programista musi sam przeliczyć sobie minuty czy godziny na sekundy. Jeśli ktoś pomyśli, że 60 to np. 60 minut, to w praktyce pomyli się dokładnie 60 razy. Podobnie założenie, że skoro wartość ciasteczka to '24', to ciasteczko będzie ważne 24 godziny lub 24 doby, wynika z mieszania znaczenia logicznego danych z mechanizmem technicznym ich przechowywania. Wartość '24' to po prostu tekst przechowywany w cookie, bez żadnego automatycznego powiązania z czasem. Z mojego doświadczenia takie pomyłki biorą się też z porównywania do innych technologii, gdzie czas ustawia się np. w minutach. W PHP (i generalnie w mechanizmie UNIX time) wszystko liczymy w sekundach. Dlatego dobre praktyki mówią, żeby zawsze jawnie pisać wyrażenia typu 60 * 60 (godzina), 60 * 60 * 24 (doba), zamiast samego „3600” czy „86400”, bo to od razu sugeruje, o jaką jednostkę chodzi i ogranicza ryzyko złej interpretacji. Jeżeli programista nie rozumie tej konwencji, będzie projektował mechanizmy sesji, logowania czy koszyków zakupów z błędnymi czasami życia ciasteczek, co może prowadzić do irytujących sytuacji dla użytkownika, a nawet do problemów z bezpieczeństwem (np. zbyt długie przechowywanie wrażliwych informacji). Dlatego tak ważne jest, żeby przy każdym użyciu setcookie() świadomie przeliczać czas na sekundy i nie sugerować się nazwą ani wartością samego ciasteczka.