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.
?>