W budowie
Utrzymywanie stanu użytkownika między żądaniami HTTP

Część 10 · Sesje i ciasteczka — kurs PHP INF.03

Część 10 kursu PHP pod kątem INF.03: Sesje i ciasteczka. Teoria w skrócie i 16 ćwiczeń z automatycznym sprawdzaniem.

  • 45 min
  • 16 slajdów
  • Notatki nauczyciela: N
  • Strona modułu: otwórz
Plan · 45 min

Co dziś robimy

  1. 12 minSesja: pamięć między stronami Sesję zaczynamy funkcją session_start() — musi być wywołana przed jakimkolwiek wyjściem…
  2. 12 minLogowanie i wylogowanie w sesji Wylogowanie czyści dane sesji i niszczy ją, a następnie przekierowuje na stronę logowania.
  3. 12 minCiasteczka i czas życia Ciasteczko z czasem życia 0 znika po zamknięciu przeglądarki.
  4. 4 minĆwiczenia 16 zadań w module — wybierz 3–4 na lekcję
  5. 5 minPodsumowanie bilet wyjściowy i zadanie domowe
Atom 1 z 4 · ~12 min

Sesja: pamięć między stronami

Sesja przechowuje dane po stronie serwera i wiąże je z przeglądarką przez identyfikator w ciasteczku. Dlatego koszyk albo login „pamiętają się” między podstronami, choć HTTP sam z siebie jest bezstanowy.

  • Sesję zaczynamy funkcją session_start() — musi być wywołana przed jakimkolwiek wyjściem HTML.
  • Dane zapisujemy w tablicy $_SESSION , np.
  • Sesja wygasa po zamknięciu przeglądarki (domyślnie) albo po czasie bezczynności ustawionym na serwerze.
  • Do usunięcia danych służy unset() , a do całkowitego zakończenia session_destroy() .
Kod · atom 1 · ~3 min

Jak to wygląda w kodzie

session_start();

$_SESSION['uczen'] = 'Ola';
$_SESSION['odwiedziny'] = ($_SESSION['odwiedziny'] ?? 0) + 1;

echo 'Uczen: ' . $_SESSION['uczen'];
echo '<p>Odwiedziny: ' . $_SESSION['odwiedziny'] . '</p>';
Przykład na żywo · atom 1 · ~3 min

Uruchom i pokaż

session_start();

$_SESSION['uczen'] = 'Ola';
$_SESSION['odwiedziny'] = ($_SESSION['odwiedziny'] ?? 0) + 1;

echo 'Uczen: ' . $_SESSION['uczen'];
echo '<p>Odwiedziny: ' . $_SESSION['odwiedziny'] . '</p>';
Sprawdzenie · atom 1 · ~2 min

Pytanie do klasy

Gdzie trzymane są dane sesji?

Atom 2 z 4 · ~12 min

Logowanie i wylogowanie w sesji

Po poprawnym sprawdzeniu hasła zapisujemy w sesji identyfikator użytkownika, a nie samo imię — imię może się zmienić, a identyfikator jest stały. Na każdej chronionej stronie sprawdzamy, czy klucz istnieje.

  • Wylogowanie czyści dane sesji i niszczy ją, a następnie przekierowuje na stronę logowania.
  • Samo unset($_SESSION['user']) bywa niewystarczające, gdy w sesji są też inne dane.
  • Do przekierowania służy header('Location: ...') , wywołane przed jakimkolwiek wyjściem.
  • Po nim zawsze dajemy exit .
Kod · atom 2 · ~3 min

Jak to wygląda w kodzie

session_start();

// logowanie
if (($_POST['login'] ?? '') === 'ola' && ($_POST['haslo'] ?? '') === 'tajne') {
    $_SESSION['user_id'] = 7;
    header('Location: panel.php');
    exit;
}

// wylogowanie
if (isset($_GET['wyjdz'])) {
    $_SESSION = [];
    session_destroy();
    header('Location: login.php');
    exit;
}
Przykład na żywo · atom 2 · ~3 min

Uruchom i pokaż

session_start();

// logowanie
if (($_POST['login'] ?? '') === 'ola' && ($_POST['haslo'] ?? '') === 'tajne') {
    $_SESSION['user_id'] = 7;
    header('Location: panel.php');
    exit;
}

// wylogowanie
if (isset($_GET['wyjdz'])) {
    $_SESSION = [];
    session_destroy();
    header('Location: login.php');
    exit;
}
Sprawdzenie · atom 2 · ~2 min

Pytanie do klasy

Co zapisujemy w sesji po logowaniu?

Atom 3 z 4 · ~12 min

Ciasteczka i czas życia

Ciasteczko zapisuje mały tekst w przeglądarce i odsyła go przy każdym żądaniu. Tworzymy je funkcją setcookie() z nazwą, wartością i czasem życia w sekundach.

  • Ciasteczko z czasem życia 0 znika po zamknięciu przeglądarki.
  • Datę w przeszłości używamy do usunięcia ciasteczka — nie ma osobnej funkcji „usuń”.
  • Ciasteczka są widoczne dla użytkownika, więc nie wolno w nich trzymać haseł.
  • Do przechowywania stanu lepsza jest sesja, a ciasteczko bywa używane na przykład do zapamiętania motywu strony.
Kod · atom 3 · ~3 min

Jak to wygląda w kodzie

setcookie('motyw', 'ciemny', time() + 60 * 60 * 24 * 30);
setcookie('ostatnia', date('Y-m-d'), time() + 3600);

echo 'Zapisane. Motyw: ' . ($_COOKIE['motyw'] ?? 'domyslny');

// usuniecie
setcookie('motyw', '', time() - 3600);
Przykład na żywo · atom 3 · ~3 min

Uruchom i pokaż

setcookie('motyw', 'ciemny', time() + 60 * 60 * 24 * 30);
setcookie('ostatnia', date('Y-m-d'), time() + 3600);

echo 'Zapisane. Motyw: ' . ($_COOKIE['motyw'] ?? 'domyslny');

// usuniecie
setcookie('motyw', '', time() - 3600);
Sprawdzenie · atom 3 · ~2 min

Pytanie do klasy

Gdzie zapisywane jest ciasteczko?

Zamknięcie · ~3 min

Co zabrać z lekcji

  • Sesja przechowuje dane po stronie serwera i wiąże je z przeglądarką przez identyfikator w ciasteczku.
  • Do przekierowania służy header('Location: ...') , wywołane przed jakimkolwiek wyjściem.
  • Ciasteczko z czasem życia 0 znika po zamknięciu przeglądarki.
  • Ćwiczenia
Bilet wyjściowy: Czego nie wolno trzymać w ciasteczku?
Odpowiedź: c) Haseł
Hyżyk· Część 10 · Sesje i ciasteczka — kurs PHP INF.03 moduł 1 / 1