Część 10 kursu PHP pod kątem INF.03: Sesje i ciasteczka. Teoria w skrócie i 16 ćwiczeń z automatycznym sprawdzaniem.
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.
session_start();
$_SESSION['uczen'] = 'Ola';
$_SESSION['odwiedziny'] = ($_SESSION['odwiedziny'] ?? 0) + 1;
echo 'Uczen: ' . $_SESSION['uczen'];
echo '<p>Odwiedziny: ' . $_SESSION['odwiedziny'] . '</p>';
session_start();
$_SESSION['uczen'] = 'Ola';
$_SESSION['odwiedziny'] = ($_SESSION['odwiedziny'] ?? 0) + 1;
echo 'Uczen: ' . $_SESSION['uczen'];
echo '<p>Odwiedziny: ' . $_SESSION['odwiedziny'] . '</p>';
Gdzie trzymane są dane sesji?
Poprawna: b) Sesja przechowuje dane po stronie serwera.
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.
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;
}
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;
}
Co zapisujemy w sesji po logowaniu?
Poprawna: c) Identyfikator jest stały i bezpieczniejszy niż imię.
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.
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);
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);
Gdzie zapisywane jest ciasteczko?
Poprawna: d) Ciasteczko przechowuje przeglądarka użytkownika.