Przejdź do głównej treści

Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Zawód: Technik informatyk, Technik programista

Kategorie: Programowanie webowe PHP

Słowa kluczowe: Cookie setcookie() w PHP

Jak, wykorzystując język PHP, zapisać w ciasteczku o nazwie dane wartość zmiennej $dane na okres 30 dni?

A.
setcookie("dane", $dane, time() + 30);
B.
setcookie("dane", $dane, time() + (3600*24*30));
C.
setcookie("dane", "dane", 30);
D.
setcookie("dane", $dane, 30);
Poprawny zapis to setcookie("dane", $dane, time() + (3600*24*30));, ponieważ trzeci argument funkcji setcookie() oznacza czas wygaśnięcia ciasteczka podany jako znacznik czasu Unix, czyli liczba sekund od 1 stycznia 1970 roku. Funkcja time() zwraca aktualny czas właśnie w sekundach, więc trzeba do niego dodać liczbę sekund odpowiadającą 30 dniom. Jeden dzień ma 24 godziny, jedna godzina 3600 sekund, więc 3600*24*30 daje okres trzydziestu dni. Dzięki temu przeglądarka zapisze ciasteczko o nazwie dane z wartością zmiennej i będzie je przechowywać przez wskazany czas. W praktyce tak zapisuje się np. preferencje użytkownika, wybrany motyw strony, prostą informację o zaakceptowaniu regulaminu albo identyfikator koszyka. Z mojego doświadczenia warto pamiętać, że setcookie() trzeba wywołać przed wysłaniem jakiejkolwiek treści HTML do przeglądarki, bo ciasteczko jest ustawiane przez nagłówek HTTP. Dobrą praktyką jest też ustawianie dodatkowych parametrów, takich jak path, secure, httponly i samesite, szczególnie gdy ciasteczko ma związek z logowaniem albo bezpieczeństwem użytkownika.
W tym pytaniu kluczowe jest zrozumienie, że czas ważności ciasteczka w PHP nie jest podawany jako liczba dni, tylko jako konkretny moment wygaśnięcia zapisany w sekundach w formacie Unix timestamp. Dlatego samo dodanie liczby 30 do time() oznaczałoby tylko 30 sekund od aktualnego momentu, a nie 30 dni. To dość częsty błąd, bo intuicyjnie można pomyśleć, że skoro w treści jest napisane „30 dni”, to wystarczy gdzieś wpisać 30. Niestety funkcja setcookie() tak tego nie interpretuje. Podanie wartości 30 jako trzeciego argumentu również nie oznacza trzydziestu dni. Oznaczałoby to datę wygaśnięcia bardzo blisko początku epoki Uniksa, czyli praktycznie ciasteczko byłoby już nieważne i przeglądarka mogłaby je od razu usunąć. Jest też różnica między nazwą ciasteczka a jego wartością: nazwa "dane" identyfikuje ciasteczko, ale wartością ma być zawartość zmiennej, a nie tekst "dane" zapisany na sztywno. W realnych aplikacjach takie pomyłki powodują trudne do złapania błędy, na przykład ustawienia użytkownika znikają po kilku sekundach albo w ciasteczku zapisuje się stały napis zamiast faktycznych danych. Poprawne podejście polega na przeliczeniu okresu przechowywania na sekundy i dodaniu go do aktualnego czasu. Moim zdaniem to jedna z tych rzeczy w PHP, którą warto zapamiętać raz porządnie, bo potem wraca przy sesjach, logowaniu i personalizacji strony.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.