CZĘŚĆ 10
Sesje i ciasteczka
PPrezentacja dla nauczyciela
Protokół HTTP jest bezstanowy — serwer nie wie, że dwa kolejne żądania pochodzą od tego samego użytkownika. Sesje (po stronie serwera) i ciasteczka (po stronie przeglądarki) pozwalają zapamiętać stan: logowanie, zawartość koszyka czy wybrany motyw. Na egzaminie INF.03 to kluczowy element bezpieczeństwa i logiki aplikacji.
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. $_SESSION['user'] = 'Ola';.
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().
session_start();
$_SESSION['uczen'] = 'Ola';
$_SESSION['odwiedziny'] = ($_SESSION['odwiedziny'] ?? 0) + 1;
echo 'Uczen: ' . $_SESSION['uczen'];
echo '<p>Odwiedziny: ' . $_SESSION['odwiedziny'] . '</p>';
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.
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;
}
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.
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);
Ćwiczenia
- 1Pierwsza sesja i zapis do $_SESSIONpierwsza sesja i zapis danychZadanie i podpowiedzi →
- 2Napraw kolejność: sesja przed HTMLsesja otwarta przed HTML-emZadanie i podpowiedzi →
- 3Odczyt z sesji z wartością domyślnąodczyt z sesji z wartością domyślnąZadanie i podpowiedzi →
- 4Sprawdzenie zalogowaniasprawdzenie stanu logowaniaZadanie i podpowiedzi →
- 5Zapis z formularza POST do sesjizapis danych z formularza POSTZadanie i podpowiedzi →
- 6Licznik sesyjnylicznik odwiedzin w sesjiZadanie i podpowiedzi →
- 7Usuń tylko pseudonim z sesjiusunięcie pojedynczego klucza unsetZadanie i podpowiedzi →
- 8Komunikat jednorazowykomunikat jednorazowy flashZadanie i podpowiedzi →
- 9Koszyk w sesji — liczba pozycjikoszyk w sesji jako tablicaZadanie i podpowiedzi →
- 10Wylogowanie z sesjipełne wylogowanie z sesjiZadanie i podpowiedzi →
- 11Bezpieczeństwo sesji: session_regenerate_idnowy identyfikator sesji regenerateZadanie i podpowiedzi →
- 12Pierwsze ciasteczko: setcookiezapis ciasteczka przez setcookieZadanie i podpowiedzi →
- 13Odczyt ciasteczka przez $_COOKIEodczyt ciasteczka z tablicy COOKIEZadanie i podpowiedzi →
- 14Usuwanie ciasteczka (czas przeszły)usunięcie ciasteczka czasem ujemnymZadanie i podpowiedzi →
- 15Wybór języka w sesjizapamiętany wybór językaZadanie i podpowiedzi →
- 16Panel logowania z weryfikacją hasłapanel logowania z weryfikacją hasłaZadanie i podpowiedzi →