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

W jaki sposób w języku PHP można sprawdzić, czy przeglądarka przesłała ciasteczko o nazwie ciastko?

A.
cookie_exists("ciastko")
B.
isset($_SESSION["ciastko"])
C.
isset($_COOKIE["ciastko"])
D.
isset($_POST["ciastko"])
Wyrażenie isset($_COOKIE["ciastko"]) sprawdza właściwe miejsce, czyli superglobalną tablicę $_COOKIE. W PHP ciasteczka przesłane przez przeglądarkę w nagłówku HTTP Cookie są automatycznie umieszczane właśnie w tej tablicy, zanim kod skryptu zacznie je normalnie odczytywać. Funkcja isset() zwraca true, gdy dany element tablicy istnieje i nie ma wartości null, więc w typowej sytuacji idealnie nadaje się do sprawdzenia, czy przeglądarka przysłała cookie o konkretnej nazwie. Praktycznie można to wykorzystać np. przy zapamiętywaniu motywu strony, zgody na regulamin, identyfikatora koszyka albo prostych preferencji użytkownika. Z mojego doświadczenia warto pamiętać, że setcookie("ciastko", "wartosc") ustawia nagłówek odpowiedzi, więc nowe ciasteczko będzie normalnie widoczne w $_COOKIE dopiero przy następnym żądaniu, a nie zawsze od razu w tym samym skrypcie. Dobra praktyka to także walidować i filtrować wartość cookie, bo użytkownik może je zmienić po swojej stronie. Przy danych wrażliwych trzeba stosować flagi HttpOnly, Secure i SameSite, ale samo sprawdzenie obecności wykonuje się właśnie przez $_COOKIE.
W tym pytaniu kluczowe jest rozróżnienie, skąd PHP bierze różne dane przesłane w żądaniu HTTP. Ciasteczka nie są częścią sesji w sensie bezpośredniego odczytu z $_SESSION. Tablica $_SESSION przechowuje dane sesyjne po stronie serwera i zwykle działa dopiero po uruchomieniu mechanizmu sesji, np. przez session_start(). Owszem, sesja często korzysta z ciasteczka z identyfikatorem sesji, ale to nie znaczy, że każde cookie użytkownika znajdziemy w $_SESSION. To częsty skrót myślowy i potem kod działa „dziwnie”, bo programista szuka danych w złym kontenerze. Również $_POST nie służy do ciasteczek. Ta tablica zawiera dane z ciała żądania wysłane metodą POST, na przykład z formularza HTML. Cookie jest przesyłane osobnym nagłówkiem HTTP Cookie, dlatego PHP udostępnia je w $_COOKIE. Nazwa cookie_exists("ciastko") wygląda nawet sensownie, ale w standardowym PHP nie ma takiej wbudowanej funkcji. Można by sobie napisać własną funkcję o takiej nazwie, lecz w pytaniu chodzi o typowy, poprawny mechanizm języka. W praktyce najbezpieczniej myśleć tak: dane formularza POST trafiają do $_POST, parametry adresu do $_GET, dane sesji serwera do $_SESSION, a ciasteczka z przeglądarki do $_COOKIE. Moim zdaniem to jedna z tych podstaw PHP, które warto mieć mocno poukładane, bo później ułatwia debugowanie logowania, koszyka czy ustawień użytkownika.

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.