Łapka LogoŁapka Infa
🌐
INF.03

Sesje i Logowanie

Odkodowanie tajemnicy logowania. Jak serwer pamięta kim jesteś przy przechodzeniu między podstronami.

Sesje (Sessions) w PHP

Strony działające w standardowym protokole HTTP mają amnezję. Jeżeli się zalogujesz (wypełnisz formularz LOGIN, PHP zweryfikuje go poprawnie w bazie i wpuści na stronę profil.php), to serwer kompletnie ZAPOMNI, kim jesteś sekundę po tym, jak tylko naciśniesz link do podstrony "Moje Wiadomości". Potraktuje Cię jak intruza. I kazałby Ci się logować na każdym kroku.

Rozwiązaniem tego okropieństwa są tzw. Sesje i ciasteczka.

Mechanizm session_start()

Aby PHP pozwolił nam zapamiętać dane użytkownika i przekazywać z podstrony na podstronę jako magiczną pamięć, musimy napisać jedną super-ważną instrukcję na SAMYM SZCZYCIE ZNACZNIKA PHP, najlepiej w linijce nr 1! Zanim jakikolwiek kod HTML czy tekst zostanie wypluty.

<?php
    session_start();
?>

Gdy tylko masz session_start() na każdej podstronie swojej witryny, otwiera się przed Tobą potężna, superglobalna tablica pamięci zwana $_SESSION.

Logowanie krok po kroku

Krok 1: W pliku (np. logowanie.php) weryfikujemy hasło (z POST z formularzem) i przypisujemy mu tzw. sesyjną pieczątkę na dłoń.

<?php
    session_start(); // Obowiązkowo!
    
    // Uproszczony przykład (zakładam pobranie POST itp)
    $haslo_z_formularza = "admin123"; 
    
    if ($haslo_z_formularza == "admin123") {
        // SUKCES! Zapisujemy stan 'zalogowany' i login.
        $_SESSION['zalogowany'] = true;
        $_SESSION['user'] = "Administrator";
    }
?>

Krok 2: Na kompletnie innej podstronie w projekcie (np. tajne_wideo.php), weryfikujemy tę pieczątkę!

<?php
    session_start(); // Przypominam, tu też z góry!
    
    // Jeśli pieczątka nie istnieje (nie ustawiono 'zalogowany' lub jest false)
    if (!isset($_SESSION['zalogowany']) || $_SESSION['zalogowany'] == false) {
        echo "Błąd! Nie masz dostępu!";
        // Możemy tu też użyć instrukcji header('Location: login.php'); wyrzucającej stąd.
    } else {
        echo "Witaj " . $_SESSION['user'] . " na podstronie VIP!";
    }
?>

Niszczenie (Wylogowywanie)

Każda impreza musi się kiedyś skończyć. Egzamin często prosi o "napisanie skryptu wylogowania, po wejściu na wyloguj.php".

<?php
    session_start();
    session_destroy(); // Całkowicie niszczy plik pieczątki na serwerze!
    // Od teraz nikt nie wejdzie.
?>