KWALIFIKACJA INF3 - CZERWIEC 2021

PYTANIE NR 8.
W jaki sposób, stosując język PHP, zapisać w ciasteczku napis znajdujący się w zmiennej dane na czas jednego dnia?
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Ciasteczko na 1 dzień ustawia się przez podanie czasu wygaśnięcia jako znacznika UNIX w przyszłości. Dlatego do bieżącego time() dodaje się liczbę sekund w dobie (24×3600). Wartość 0 oznacza cookie sesyjne, a samo time() daje wygaśnięcie "teraz".

Pełne wyjaśnienie:

W PHP czas wygaśnięcia ciasteczka przekazuje się do setcookie() jako parametr expires, czyli czas bezwzględny (timestamp UNIX) określający chwilę, w której przeglądarka ma uznać cookie za nieważne.

Aby zapisać wartość zmiennej $dane na jeden dzień, należy wziąć bieżący czas funkcją time() i dodać liczbę sekund w 24 godzinach:

time() + (3600 * 24)

To daje moment wygaśnięcia przesunięty o dobę w przyszłość, więc przeglądarka będzie przechowywać cookie do tego czasu.

Dlaczego pozostałe odpowiedzi są błędne:

  • Ustawienie wartości jako tekstu "dane" zamiast zmiennej powoduje zapis dosłownego napisu, a dodatkowo expires równe 0 tworzy cookie sesyjne (zwykle znika po zamknięciu przeglądarki), a nie na 24 godziny.
  • Użycie samego time() jako expires oznacza, że cookie wygasa w chwili ustawienia (praktycznie natychmiast), więc nie spełnia wymogu "na jeden dzień".
  • Wartość 0 w polu wygaśnięcia nie oznacza "0 dni", tylko brak trwałości – cookie sesyjne. To częsty błąd wynikający z intuicyjnego rozumienia zera jako czasu trwania.

W praktyce (zwłaszcza w nowszych wersjach PHP) często spotyka się też zapis z tablicą opcji (np. ustawienia httponly, secure, samesite), ale sama idea wyliczenia wygaśnięcia jako time() + 86400 pozostaje taka sama.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
To parametr expires, czyli moment wygaśnięcia ciasteczka jako czas UNIX (liczba sekund od 1970-01-01). Przeglądarka usuwa cookie po przekroczeniu tej daty. Jeśli ustawisz 0, zwykle powstaje cookie sesyjne (do zamknięcia przeglądarki).
Dodaj do bieżącego znacznika czasu liczbę sekund w dobie: time() + 24*3600. Przykład: setcookie("nazwa", $wartosc, time() + (3600*24));. To ustawia wygaśnięcie w przyszłości, więc cookie jest trwałe przez ok. 1 dzień.
Bo time() zwraca aktualny timestamp. Jeśli podasz go jako expires, to data wygaśnięcia wypada "teraz", więc przeglądarka może od razu uznać cookie za przeterminowane. Trzeba dodać okres, np. time()+86400.
Najczęściej powstaje ciasteczko sesyjne, które jest przechowywane tylko do końca sesji przeglądarki (np. do jej zamknięcia). To nie jest równoważne "0 dni". Jeśli chcesz 1 dzień, ustaw timestamp w przyszłości: time()+86400.
Wartość zmiennej przekazujesz bez cudzysłowów, np. $dane. Jeśli wpiszesz "dane", zapiszesz dosłownie ciąg znaków "dane". Poprawny wzorzec to: setcookie("dane", $dane, ...).
Cookie jest wysyłane w nagłówku HTTP Set-Cookie, więc setcookie() musi wykonać się przed wysłaniem treści odpowiedzi (zanim pojawi się wyjście HTML/echo). W przeciwnym razie pojawia się błąd typu "headers already sent".
Poza wygaśnięciem często ustawia się HttpOnly (ogranicza dostęp z JS), Secure (tylko po HTTPS) oraz SameSite (ogranicza wysyłanie w żądaniach cross-site). To poprawia bezpieczeństwo, zwłaszcza dla identyfikatorów sesji i tokenów.
Bo to szybki, czytelny przelicznik: 3600 sekund to 1 godzina, a 24 godziny to doba. Dzięki temu widać logikę obliczenia czasu życia cookie bez zapamiętywania liczby 86400. Na egzaminie ważne jest rozumienie jednostek, nie tylko "magicznej" liczby.
Tak, w praktyce spotyka się wariant, gdzie zamiast wielu parametrów przekazuje się tablicę opcji (m.in. expires, path, secure, httponly, samesite). Ułatwia to czytelność i ustawianie atrybutów bezpieczeństwa, ale idea wyliczenia daty wygaśnięcia jest identyczna.
Najczęstsze to: podanie expires jako czasu trwania zamiast timestampu, użycie time() bez dodania okresu, ustawienie 0 mylone z "0 dni", oraz wpisanie nazwy zmiennej w cudzysłowie (zapisuje tekst, nie wartość). Pomaga sprawdzić, co oznacza każdy parametr.
info

To pytanie poprawnie rozwiązuje 61% zdających egzamin. średnie

Eksperci podkreślają: "Ciasteczko na 1 dzień ustawia się przez podanie czasu wygaśnięcia jako znacznika UNIX w przyszłości."

Źródła:

  • PHP Manual: setcookie — Sends a cookie, https://www.php.net/manual/en/function.setcookie.php - accessed 2026-03-01
  • PHP Manual: time — Return current Unix timestamp, https://www.php.net/manual/en/function.time.php - accessed 2026-03-01
  • OWASP Cheat Sheet Series: Session Management Cheat Sheet (cookie attributes, expiry), https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html - accessed 2026-03-01

Materiały:

  • Dokumentacja PHP: setcookie() (manual)
  • OWASP Cheat Sheet: Session Management / Cookies
  • Materiały szkolne INF.3 dotyczące PHP i HTTP (cookies, nagłówki)

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego