KWALIFIKACJA INF3 - CZERWIEC 2023 (test 2)

PYTANIE NR 38.
Który z kodów PHP sprawi, że zostanie wyświetlona sformatowana data oraz czas ostatnich odwiedzin użytkownika witryny, natomiast podczas pierwszej wizyty nic się nie wyświetli?
Ilustracja przedstawia fragment kodu PHP z czterema różnymi wariantami.
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Poprawne rozwiązanie powinno działać tak: przy pierwszej wizycie nie ma jeszcze zapisanego znacznika czasu, więc skrypt nic nie wypisuje. Przy kolejnych wejściach odczytuje zapisany timestamp (np. z cookie), formatuje go funkcją daty i wyświetla. Dodatkowo zapis "nowej" wartości odbywa się na przyszłość.

Pełne wyjaśnienie:

Aby spełnić warunek zadania, kod w PHP musi rozróżniać pierwszą wizytę od kolejnych odwiedzin. Najczęściej realizuje się to przez zapisanie po stronie klienta znacznika czasu (cookie) i jego późniejszy odczyt.

Jak powinno działać poprawne podejście:

  • Skrypt sprawdza, czy istnieje wartość "ostatniej wizyty" (np. klucz w $_COOKIE).
  • Jeżeli nie istnieje (pierwsze wejście), nie wyświetla żadnego komunikatu.
  • Jeżeli istnieje, zamienia zapisany timestamp na czytelną postać (np. funkcją formatującą datę i czas) i dopiero wtedy wyświetla informację użytkownikowi.
  • Niezależnie od wyświetlania, aktualizuje zapis (ustawia nowe cookie z bieżącym czasem), aby przy następnym żądaniu było co pokazać.

Dlaczego inne typowe rozwiązania bywają błędne:

  • Wyświetlanie daty bez sprawdzenia istnienia danych powoduje, że przy pierwszej wizycie pojawia się niepożądany tekst, domyślna data lub błąd/ostrzeżenie o niezdefiniowanym indeksie.
  • Próba odczytu cookie ustawionego w tym samym żądaniu zwykle nie daje oczekiwanego efektu, bo ciasteczko jest wysyłane do przeglądarki w nagłówku i wraca dopiero w kolejnym żądaniu.
  • Ustawienie cookie po rozpoczęciu generowania treści może się nie powieść (problem z nagłówkami), co skutkuje brakiem zapamiętania wizyty.
  • Formatowanie daty bez uwzględnienia poprawnego typu danych (np. łańcuch zamiast liczby) może prowadzić do nieprawidłowych wyników.

Na egzaminie warto pamiętać o dwóch regułach: (1) brak wartości trzeba odróżniać od pustej wartości, (2) mechanizmy oparte o cookie działają "z opóźnieniem o jedno żądanie".

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Cookie to mała porcja danych zapisywana w przeglądarce i odsyłana do serwera przy kolejnych żądaniach. W PHP służy m.in. do zapamiętania stanu użytkownika (np. timestamp ostatniej wizyty). Odczyt odbywa się przez $_COOKIE, a zapis przez setcookie().
Bo nie istnieje jeszcze wiarygodna informacja o "poprzedniej" wizycie. Poprawny kod najpierw sprawdza, czy zapis (np. cookie) już istnieje, i dopiero wtedy wyświetla komunikat. Przy braku danych powinien wykonać tylko zapis bieżącego czasu na przyszłość.
Zwykle dopiero przy następnym żądaniu HTTP. setcookie() wysyła nagłówek do przeglądarki, a przeglądarka odsyła cookie w kolejnym wejściu na stronę. Dlatego kod nie powinien zakładać, że świeżo ustawione cookie da się odczytać natychmiast.
Najczęściej używa się funkcji date() z odpowiednim formatem, podając timestamp (np. z cookie). Trzeba pamiętać o poprawnym typie danych oraz strefie czasowej serwera. Format dobiera się do wymagań zadania, np. dzień-miesiąc-rok i godzina:minuta.
Cookie działa między przeglądarką a serwerem i może przetrwać zamknięcie przeglądarki (zależnie od ustawień). Sesja jest zwykle krótsza i zależy od identyfikatora sesji. Dla "ostatniej wizyty" częściej wybiera się cookie, bo ma sens także po wielu dniach.
Bo cookie jest przesyłane w nagłówkach HTTP. Jeśli skrypt wcześniej wypisze treść (np. echo), nagłówki mogą zostać już wysłane i ustawienie cookie się nie powiedzie. W praktyce zapis ciasteczka robi się na początku skryptu, zanim zacznie się generowanie odpowiedzi.
Typowe pomyłki to: brak sprawdzenia istnienia klucza (ostrzeżenia o niezdefiniowanym indeksie), mylenie pustej wartości z brakiem danych, oraz błędne założenie, że cookie ustawione w tym samym żądaniu będzie już widoczne w $_COOKIE. Warto stosować warunek istnienia i logikę "pierwsza vs kolejna wizyta".
To czas poprzedniego wejścia użytkownika na stronę, a nie czas bieżącego wejścia. Dlatego poprawny algorytm: (1) odczytaj poprzedni timestamp i ewentualnie go wyświetl, (2) zapisz bieżący czas jako "ostatnią wizytę" na przyszłość.
Tak, cookie jest po stronie klienta, więc użytkownik może je skasować lub zmodyfikować. W zadaniach egzaminacyjnych zwykle zakłada się poprawne działanie mechanizmu, ale w praktyce warto traktować dane z cookie jako potencjalnie niewiarygodne i w razie potrzeby stosować walidację lub przechowywać dane po stronie serwera.
Przećwicz: odczyt/zapis cookie, użycie date() i time(), warunki istnienia danych oraz kolejność działań (najpierw odczyt i wyświetlenie, potem zapis nowej wartości). Pomocne jest też rozumienie nagłówków HTTP i tego, że cookie "wraca" dopiero w następnym żądaniu.
info

Statystycznie 36% uczniów zna prawidłową odpowiedź. bardzo trudne

W praktyce zawodowej kluczowe jest to, że poprawne rozwiązanie powinno działać tak: przy pierwszej wizycie nie ma jeszcze zapisanego znacznika czasu, więc skrypt nic nie wypisuje.

Źródła:

  • PHP Manual: setcookie() — https://www.php.net/manual/en/function.setcookie.php (accessed 2026-03-01)
  • PHP Manual: $_COOKIE — https://www.php.net/manual/en/reserved.variables.cookies.php (accessed 2026-03-01)
  • PHP Manual: date() — https://www.php.net/manual/en/function.date.php (accessed 2026-03-01)

Materiały:

  • Dokumentacja PHP: setcookie() oraz opis działania ciasteczek
  • Dokumentacja PHP: date() i time() (formaty i strefy czasowe)
  • Materiały o HTTP cookies (nagłówki, atrybuty Expires/Max-Age, SameSite)

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego