INF.03 · Aplikacje internetowe PHP

Sesje w PHP — wprowadzenie

Sesja pamięta między żądaniami.

  • PHP8.3
  • mysqli · MariaDB
  • Praktyka i diagnoza

Po tej lekcji: Rozdzielisz identyfikator w cookie od danych na serwerze oraz sprawdzisz dwie niezależne sesje.

Zrozum mechanizm

Zwykła zmienna PHP znika po zakończeniu żądania. Sesja pozwala odtworzyć stan w kolejnych żądaniach. Cookie przeglądarki przechowuje identyfikator, a dane $_SESSION są po stronie serwera. Nie wkładaj do sesji jawnego hasła i nie pokazuj identyfikatora w HTML lub adresie URL.

Session_start otwiera lub odtwarza sesję przed wysłaniem HTML. Strict mode odrzuca nieznane, narzucone ID; use_only_cookies eliminuje przekazywanie ID przez URL. Cookie HttpOnly utrudnia odczyt skryptem, Secure wymaga HTTPS, SameSite ogranicza część żądań między witrynami, lecz nie zastępuje tokenu CSRF. Na lokalnym HTTP Secure=false jest świadomym ustawieniem do ćwiczeń, na publicznym HTTPS musi być true.

W projekcie sesja logowania wygasa po 30 min bezczynności i po 8 h niezależnie od aktywności. Po wygaśnięciu zmieniamy ID i czyścimy dane. Session_destroy nie jest tym samym co usunięcie cookie; pełne wylogowanie poznasz za chwilę.

Jak uruchamiać krótkie przykłady?

Każdy krótki przykład oznaczony własnym plikiem uruchamiaj osobno, nie doklejaj wszystkich definicji do jednego pliku. W edytorze zapisz go jako .php, a w terminalu tego folderu wpisz np. php for.php. Wtedy pokazane końce wierszy PHP_EOL są widoczne. W odpowiedzi HTML znak końca wiersza sam nie robi nowej linii na ekranie: użyj <br> albo znacznika <pre>. Wyświetl źródło pozwala zobaczyć tekst odpowiedzi.

Przykłady opisane jako fragment projektu wymagają paczki KINO / LAB i wcześniejszej konfiguracji. Nie uruchamiaj ich jako samodzielnych endpointów. Pełny plik niżej pokazuje kontekst. Funkcje h(), pole() i wymagajPost() są nasze; ich definicje wczytuje bootstrap.php.

Sesja: uruchom, zapisz, odczytaj

Odświeżenie to nowe żądanie. Zwykła zmienna zaczyna od nowa, ale sesja pozwala odczytać wcześniejszy stan przypisany do cookie przeglądarki.

Podstawowa forma: session_start(); → $_SESSION["klucz"] = wartosc;

session.phpphp
<?php
// Samodzielny plik lokalny. session_start musi być przed HTML.
session_start();
$_SESSION['odwiedziny'] = ($_SESSION['odwiedziny'] ?? 0) + 1;
echo 'Odwiedziny w tej sesji: ' . $_SESSION['odwiedziny'];
  1. session_start odtwarza sesję na podstawie identyfikatora cookie albo tworzy nową. Puste nawiasy oznaczają wywołanie bez własnych argumentów.
  2. $_SESSION jest specjalną tablicą. W pierwszym żądaniu nie ma klucza odwiedziny, więc ?? daje 0; dodajemy 1 i zapisujemy wynik.
  3. W następnym żądaniu z tym samym cookie odczytamy 1, zapiszemy 2 i wyświetlimy 2. Inna sesja przeglądarki ma osobny licznik.
  4. To minimalna ilustracja, nie nowy bootstrap projektu. Pełna paczka ustawia bezpieczne opcje cookie i timeout przed uruchomieniem sesji; nie dopisuj do niej drugiego session_start.

Jak czytać pozostałe zapisy w pełnym przykładzie

ZapisZnaczeniePrzykład użycia
naglowek($tytul), stopka()Nasze funkcje wypisujące wspólny HTML strony. void oznacza brak zwracanego wyniku do użycia w wyrażeniu.naglowek("Katalog");
dirname(__DIR__)dirname daje katalog nadrzędny; __DIR__ to katalog bieżącego pliku. W public prowadzi to do katalogu projektu, a dopisana ścieżka wskazuje src.dirname(__DIR__)."/src/bootstrap.php"
$_SESSION i $_POSTSpecjalne tablice PHP: pierwsza to stan sesji, druga dane formularza POST. Zewnętrzne wartości trzeba sprawdzić, nie ufać samym nazwom kluczy.$_SESSION["user_id"]
?? i ??=a ?? b wybiera b dla braku/null; a ??= b zapisuje b tylko, gdy a nie istnieje lub ma null. Nie reagują na0 ani pusty napis.$_SESSION["koszyk"] ??= [];

Sprawdź w działaniu

Sesja pamięta między żądaniami — sprawdź w modelu

Model w przeglądarce wyjaśnia mechanizm na fikcyjnych danych. Nie wykonuje PHP ani zapytań SQL i nie tworzy kont. Prawdziwe skrypty uruchomisz lokalnie z paczki.

Ta interakcja wymaga włączonego JavaScriptu.

Przewidź rezultat, wykonaj próbę i wyjaśnij, która decyzja po stronie serwera decyduje o wyniku.

Uruchom krok po kroku

Otwórz sesja.php i odśwież trzy razy: zwykła zmienna nadal ma 1, sesja rośnie. Otwórz zwykłą drugą kartę tej samej przeglądarki — współdzieli cookie i sesję. Okno prywatne lub drugi profil ma osobny stan. W Network/Application zobacz nazwę i atrybuty cookie, nie kopiuj jego wartości do pracy.

Plik wzorcowy: public/sesja.php

public/sesja.phpphp
<?php

require_once dirname(__DIR__).'/src/bootstrap.php';
// Zwykła zmienna powstaje od nowa. Sesja przetrwa kolejne żądanie z tym cookie.
$zwyklyLicznik = 0;
$zwyklyLicznik++;
$_SESSION['odwiedziny'] = ($_SESSION['odwiedziny'] ?? 0) + 1;
naglowek('Pamięć między żądaniami');
echo '<p>Zwykła zmienna: '.$zwyklyLicznik.'</p>';
echo '<p>W tej sesji: '.(int) $_SESSION['odwiedziny'].'</p>';
echo '<p><a href="/sesja.php">Wykonaj kolejne żądanie</a></p>';
stopka();

Ustawienia cookie i start sesji

src/bootstrap.phpphp
ini_set('session.use_strict_mode', '1');
ini_set('session.use_only_cookies', '1');
session_name('KINO_DEMO');
session_set_cookie_params([
    'lifetime' => 0, 'path' => '/', 'secure' => $konfiguracja['https'],
    'httponly' => true, 'samesite' => 'Lax',
]);
session_start();

Pobierz i odtwórz projekt

W „Źródłach i materiałach” na końcu pobierz KINO / LAB.zip. Rozpakuj całość; instrukcja START.txt opisuje konfigurację. Pierwsze 6 przykładów w public/podstawy działa bez bazy. Dalsze wymagają lokalnej MariaDB 11.4, importu schema.sql i lokalnego konta bazy z minimalnymi prawami. Gotowa paczka pokazuje całość, ale w tej lekcji wykonaj opisane kroki i własne zadanie.

Ćwiczenie z pomocą · samodzielna praca

Twoja próba — podpowiedzi otwieraj po kolei

Porównaj licznik w dwóch kartach jednego profilu i w profilu prywatnym.

Oczekiwany rezultat
Wspólne karty korzystają z jednego licznika; prywatny profil zaczyna osobny. Oddaj opis, bez identyfikatorów sesji.
Potrzebujesz pomocy? Rozwiązuj krok po kroku.
Krok 1 — pokaż podpowiedź

Odszukaj wskazany plik i zapisz przewidywany rezultat przed zmianą.

Krok 2 — pokaż podpowiedź

Zmień jedną rzecz. Sprawdź metodę żądania, dane i odpowiedź lub wynik programu.

Krok 3 — pokaż podpowiedź

Wykonaj próbę graniczną lub błędną. Porównaj także stan bazy lub sesji, nie tylko komunikat.

Otwórz tylko tyle podpowiedzi, ile potrzebujesz. Po każdym kroku wróć do zadania i sprawdź wynik.

Podsumowanie

Co warto zapamiętać

  1. Rozdzielisz identyfikator w cookie od danych na serwerze oraz sprawdzisz dwie niezależne sesje.
  2. Potrafisz wskazać w kodzie przyczynę wyniku i zaplanować próbę błędnych danych.
  3. Nie oddajesz haseł, pliku config.local.php ani wartości cookie.

Dalej na swoim koncie

Rozgrzewki, quiz i zadania są w biurku ucznia.

Teoria jest otwarta dla wszystkich. Żeby rozwiązywać zadania, zapisywać szkice i widzieć swój postęp, zaloguj się.

Zaloguj się →
Źródła i dalsza nauka