Globalne tablice do przechowywania danych o ciastkach i sesjach: $_COOKIE oraz $_SESSION są częścią języka
A. Perl
B. PHP
C. C#
D. JavaScript
Pytanie z egzaminu CKE, czerwiec 2020 (arkusz EE.09-SG-20.06).
Zmienne superglobalne $_COOKIE oraz $_SESSION należą do PHP, czyli języka bardzo często używanego po stronie serwera w aplikacjach WWW. Są to specjalne tablice dostępne globalnie w skryptach PHP, bez potrzeby przekazywania ich jako parametrów do funkcji. $_COOKIE przechowuje dane odczytane z ciasteczek przysłanych przez przeglądarkę, np. identyfikator preferencji użytkownika albo informację o zaakceptowaniu regulaminu. $_SESSION służy natomiast do przechowywania danych sesyjnych po stronie serwera, np. identyfikatora zalogowanego użytkownika, koszyka w sklepie internetowym albo komunikatu „flash” po wysłaniu formularza. Z mojego doświadczenia warto pamiętać, że sesje w PHP zwykle wymagają użycia session_start() przed odczytem lub zapisem danych. Dobra praktyka branżowa mówi też, żeby nie przechowywać w ciasteczkach haseł ani poufnych danych wprost. Jeśli już używamy cookies, to ustawiamy flagi HttpOnly, Secure i odpowiednie SameSite, bo to realnie zmniejsza ryzyko ataków typu XSS czy CSRF. W praktyce PHP rozdziela więc wygodnie dane klienta i dane sesyjne serwera, i właśnie dlatego te tablice są tak charakterystyczne dla tego języka.
W tym pytaniu łatwo pomylić kilka technologii webowych, bo każda z nich może w jakiś sposób pracować z danymi użytkownika, przeglądarką albo stanem aplikacji. Kluczowy szczegół jest jednak taki, że zapis $_COOKIE i $_SESSION to charakterystyczna składnia PHP. Znak dolara przed nazwą zmiennej oraz podkreślone, wielkimi literami zapisane tablice superglobalne są bardzo typowe dla tego języka. PHP działa głównie po stronie serwera, więc świetnie pasuje do obsługi sesji logowania, formularzy, koszyków zakupowych i komunikacji z bazą danych.
C# również może być używany w aplikacjach internetowych, na przykład w ASP.NET, ale tam mechanizmy cookies i sesji mają inną składnię oraz inne obiekty, np. HttpContext, Request.Cookies albo Session. Samo istnienie sesji w technologii nie oznacza jeszcze, że używa ona nazw $_SESSION. To częsty błąd myślowy: ktoś kojarzy pojęcie „sesja” z dowolnym backendem i wybiera język, który zna z programowania ogólnego.
Perl historycznie był używany w skryptach CGI i też potrafi obsługiwać ciasteczka, ale nie definiuje standardowych superglobalnych tablic o nazwach $_COOKIE i $_SESSION. W Perlu znak dolara też występuje przy zmiennych skalarnych, przez co może zmylić, no i to jest taki haczyk. Jednak sam wygląd pojedynczego symbolu nie wystarcza, trzeba znać konkretne mechanizmy języka.
JavaScript pracuje głównie w przeglądarce, choć dziś także na serwerze przez Node.js. W przeglądarce ciasteczka odczytuje się zwykle przez document.cookie, a dane sesyjne można trzymać np. w sessionStorage, ale to zupełnie inne API. JavaScript nie posiada wbudowanych tablic superglobalnych $_COOKIE i $_SESSION. Dlatego poprawne skojarzenie powinno iść w stronę PHP oraz programowania po stronie serwera.
C# również może być używany w aplikacjach internetowych, na przykład w ASP.NET, ale tam mechanizmy cookies i sesji mają inną składnię oraz inne obiekty, np. HttpContext, Request.Cookies albo Session. Samo istnienie sesji w technologii nie oznacza jeszcze, że używa ona nazw $_SESSION. To częsty błąd myślowy: ktoś kojarzy pojęcie „sesja” z dowolnym backendem i wybiera język, który zna z programowania ogólnego.
Perl historycznie był używany w skryptach CGI i też potrafi obsługiwać ciasteczka, ale nie definiuje standardowych superglobalnych tablic o nazwach $_COOKIE i $_SESSION. W Perlu znak dolara też występuje przy zmiennych skalarnych, przez co może zmylić, no i to jest taki haczyk. Jednak sam wygląd pojedynczego symbolu nie wystarcza, trzeba znać konkretne mechanizmy języka.
JavaScript pracuje głównie w przeglądarce, choć dziś także na serwerze przez Node.js. W przeglądarce ciasteczka odczytuje się zwykle przez document.cookie, a dane sesyjne można trzymać np. w sessionStorage, ale to zupełnie inne API. JavaScript nie posiada wbudowanych tablic superglobalnych $_COOKIE i $_SESSION. Dlatego poprawne skojarzenie powinno iść w stronę PHP oraz programowania po stronie serwera.