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.