W kodzie HTML zdefiniowano formularz, który wysyła dane do pliku formularz.php. Po wciśnięciu przycisku typu submit przeglądarka przechodzi do przedstawionego adresu.
…/formularz.php?imie=Anna&nazwisko=KowalskaNa podstawie podanego adresu można powiedzieć, że dane do pliku formularz.php zostały przesłane metodąA. SESSION
B. POST
C. GET
D. COOKIE
Pytanie z egzaminu CKE, czerwiec 2022 (arkusz E.14-SG-22.06).
Adres formularz.php?imie=Anna&nazwisko=Kowalska jasno pokazuje, że dane zostały przesłane metodą GET. W tej metodzie pary nazwa=wartość są dopisywane do adresu URL po znaku zapytania, a kolejne pola oddziela się znakiem &. Tutaj widać pola imie oraz nazwisko, więc przeglądarka nie ukryła danych w treści żądania, tylko umieściła je w tzw. query string. W praktyce GET stosuje się głównie do pobierania danych, filtrowania, wyszukiwania, paginacji albo budowania linków, które można skopiować i wysłać komuś innemu. Na przykład adres sklep.php?kategoria=monitory&sortuj=cena może od razu otworzyć konkretny widok strony. Moim zdaniem to jedna z rzeczy, które warto dobrze zapamiętać, bo w PHP takie dane odbiera się przez tablicę $_GET, np. $_GET['imie']. Dobra praktyka jest taka, żeby metodą GET nie wysyłać haseł, tokenów ani danych wrażliwych, ponieważ są widoczne w pasku adresu, historii przeglądarki i logach serwera. Do takich danych lepiej użyć POST oraz dodatkowo HTTPS.
Jeżeli w adresie po nazwie pliku pojawia się znak zapytania i dalej ciąg w stylu imie=Anna&nazwisko=Kowalska, to mamy klasyczny zapis parametrów metody GET. Częsty błąd polega na tym, że ktoś kojarzy każdy formularz z metodą POST, bo rzeczywiście bardzo często używa się jej przy logowaniu, rejestracji albo zapisie danych do bazy. POST działa jednak inaczej: wartości pól formularza trafiają do ciała żądania HTTP, a nie są dopisywane do paska adresu. Użytkownik nie widzi ich bezpośrednio w URL, choć oczywiście to nie znaczy automatycznie, że są bezpieczne bez szyfrowania HTTPS. W PHP dane z takiego formularza odczytuje się zwykle przez $_POST, a nie przez $_GET.
COOKIE i SESSION też bywają mylone z przesyłaniem formularzy, ale to inne mechanizmy. Ciasteczka COOKIE są przechowywane po stronie przeglądarki i wysyłane automatycznie do serwera przy kolejnych żądaniach, zwykle do zapamiętania identyfikatora sesji, preferencji użytkownika albo ustawień strony. Nie rozpoznaje się ich po parametrach dopisanych do URL formularza. Sesja SESSION to z kolei mechanizm serwerowy, w PHP obsługiwany przez $_SESSION, gdzie dane użytkownika są trzymane po stronie serwera i powiązane najczęściej z identyfikatorem zapisanym w cookie. Z mojego doświadczenia najprostsza zasada jest taka: jeśli dane formularza widać w adresie po znaku ?, to myślimy GET. Jeśli ich w adresie nie ma, a formularz coś zapisuje lub przesyła bardziej prywatne informacje, bardzo możliwe że użyto POST.
COOKIE i SESSION też bywają mylone z przesyłaniem formularzy, ale to inne mechanizmy. Ciasteczka COOKIE są przechowywane po stronie przeglądarki i wysyłane automatycznie do serwera przy kolejnych żądaniach, zwykle do zapamiętania identyfikatora sesji, preferencji użytkownika albo ustawień strony. Nie rozpoznaje się ich po parametrach dopisanych do URL formularza. Sesja SESSION to z kolei mechanizm serwerowy, w PHP obsługiwany przez $_SESSION, gdzie dane użytkownika są trzymane po stronie serwera i powiązane najczęściej z identyfikatorem zapisanym w cookie. Z mojego doświadczenia najprostsza zasada jest taka: jeśli dane formularza widać w adresie po znaku ?, to myślimy GET. Jeśli ich w adresie nie ma, a formularz coś zapisuje lub przesyła bardziej prywatne informacje, bardzo możliwe że użyto POST.