Stan logowania to informacja, że po udanym uwierzytelnieniu (np. sprawdzeniu loginu i hasła) użytkownik ma być rozpoznawany w kolejnych żądaniach HTTP. Ponieważ HTTP jest bezstanowe, aplikacja musi ten stan gdzieś utrzymać.
W PHP standardowo robi się to przez sesję, czyli dane przechowywane po stronie serwera, dostępne w kodzie przez tablicę $_SESSION. W sesji zapisuje się zwykle np. ID użytkownika, rolę lub informację o zalogowaniu. Klient dostaje jedynie identyfikator sesji (najczęściej w cookie sesyjnym), a właściwe dane pozostają na serwerze, co ogranicza ryzyko ich modyfikacji po stronie użytkownika.
Dlaczego pozostałe odpowiedzi są błędne w tym kontekście:
- $_COOKIE przechowuje dane po stronie przeglądarki. Użytkownik może je podejrzeć i zmienić, więc nie powinno się tam trzymać informacji typu "czy zalogowany" jako źródła prawdy (co najwyżej tokeny z odpowiednimi zabezpieczeniami, ale to inny temat).
- $_SERVER zawiera informacje o środowisku i żądaniu (nagłówki, ścieżki, adres IP itd.), ale nie służy do przechowywania trwałego stanu logowania między żądaniami.
- $_FILES dotyczy plików przesyłanych formularzem i nie ma związku z utrzymywaniem sesji logowania.
W praktyce samo użycie $_SESSION nie wystarcza, by "gwarantować" bezpieczeństwo: trzeba też dbać o konfigurację cookie sesji (np. flagi HTTPOnly/Secure), regenerację identyfikatora sesji po logowaniu oraz ochronę przed XSS/CSRF. Jednak spośród podanych superglobalnych właściwym miejscem na dane logowania jest $_SESSION.