Sesje w PHP

1. Czym jest sesja w PHP?

Sesja to mechanizm umożliwiający przechowywanie danych po stronie serwera, które są dostępne dla konkretnego użytkownika przez wiele żądań HTTP. Ponieważ protokół HTTP jest bezstanowy (każde żądanie jest niezależne), sesje pozwalają „zapamiętać” informacje o użytkowniku między kolejnymi wejściami na stronę.

Typowe zastosowania sesji:

  • logowanie użytkownika,
  • przechowywanie koszyka w sklepie internetowym,
  • zapamiętywanie ustawień użytkownika (język, motyw),
  • ochrona przed nieautoryzowanym dostępem.

2. Jak działają sesje w PHP?

  • PHP generuje unikalny identyfikator sesji (session_id).
  • Ten identyfikator jest wysyłany do przeglądarki w postaci ciasteczka (PHPSESSID) lub przekazywany w URL.
  • Serwer przechowuje dane sesji w plikach lub w bazie danych, powiązane z tym identyfikatorem.
  • Przy każdym kolejnym żądaniu przeglądarka wysyła identyfikator sesji, a PHP ładuje odpowiednie dane z serwera.

3. Podstawowe funkcje PHP do obsługi sesji

a) Rozpoczęcie sesji

  • musi być wywołane przed wysłaniem jakiegokolwiek outputu do przeglądarki.
  • jeśli sesja już istnieje, session_start() ją wznawia.

b) Zapisywanie danych do sesji

Dane zapisujemy w superglobalnej tablicy $_SESSION:


c) Odczytywanie danych z sesji


d) Usuwanie danych z sesji

  • Usunięcie konkretnej zmiennej:
  • Zniszczenie całej sesji:

e) Identyfikator sesji

  • Można go pobrać i ustawić ręcznie:

4. Bezpieczeństwo sesji

Sesje są bezpieczniejsze niż cookies, ponieważ dane przechowywane są na serwerze, ale nadal warto stosować dodatkowe zabezpieczenia:

  • Regeneracja identyfikatora sesji: Chroni przed atakami typu session fixation:
  • Ustawienie ciasteczka sesji na httponly i secure:
  • Wylogowanie użytkownika po okresie bezczynności – ogranicza ryzyko przejęcia sesji.

5. Sesje a cookies

  • PHP domyślnie używa ciasteczka PHPSESSID do przechowywania identyfikatora sesji.
  • Można też przekazywać ID sesji w URL (mniej bezpieczne).
  • Dane sesji nie są przechowywane w przeglądarce, tylko na serwerze.

6. Przykład – prosty system logowania