Erinnere dich von Seite zu Seite an deine Besucher: sicherer Login, ein Warenkorb in der Session und richtig geschützte Cookies.
Diese Lektion in Kodokon öffnenHTTP merkt sich nichts: Jede Anfrage kommt frisch an, ohne Verbindung zur vorherigen. Sessions lösen dieses Problem: session_start() verknüpft den Besucher mit einer eindeutigen Kennung, die in einem Cookie übertragen wird, und mit einem Speicherbereich auf der Serverseite, der über $_SESSION zugänglich ist. Rufe session_start() ganz oben auf jeder betroffenen Seite auf, vor jeder Ausgabe.
<?php
declare(strict_types=1);
session_start();
$storedHash = password_hash('secret123', PASSWORD_DEFAULT);
$password = $_POST['password'] ?? '';
if (password_verify($password, $storedHash)) {
session_regenerate_id(true);
$_SESSION['user_id'] = 42;
header('Location: /account.php');
exit;
}
echo "Invalid credentials.";Eine Seite zu schützen läuft darauf hinaus, die Anwesenheit des Nutzers in der Session zu prüfen und andernfalls weiterzuleiten. Die Session dient außerdem als idealer temporärer Speicher für einen Warenkorb: Ein assoziatives Array Produkt-ID => Menge überlebt von Seite zu Seite.
<?php
declare(strict_types=1);
session_start();
if (!isset($_SESSION['user_id'])) {
header('Location: /login.php');
exit;
}
$_SESSION['cart'] ??= [];
$productId = filter_input(
INPUT_POST,
'product_id',
FILTER_VALIDATE_INT
);
if (is_int($productId)) {
$qty = $_SESSION['cart'][$productId] ?? 0;
$_SESSION['cart'][$productId] = $qty + 1;
}
$count = array_sum($_SESSION['cart']);
echo "Cart: " . $count . " item(s)";Cookies dagegen leben auf dem Gerät des Nutzers und überleben das Schließen des Browsers: perfekt für ein Theme oder eine Spracheinstellung. Seit PHP 7.3 nimmt setcookie() ein Array von Optionen entgegen: Verlange secure (nur HTTPS), httponly (für JavaScript unsichtbar) und samesite (begrenzt das Senden von anderen Websites aus).
<?php
setcookie('theme', 'dark', [
'expires' => time() + 60 * 60 * 24 * 30,
'path' => '/',
'secure' => true,
'httponly' => true,
'samesite' => 'Lax',
]);
$theme = $_COOKIE['theme'] ?? 'light';
echo "Active theme: " . $theme;Das Abmelden muss genauso sorgfältig ablaufen wie das Anmelden: $_SESSION leeren, die Session auf der Serverseite zerstören und das Cookie ablaufen lassen, das die Kennung transportiert hat.
<?php
session_start();
$_SESSION = [];
session_destroy();
setcookie(session_name(), '', time() - 3600, '/');
header('Location: /login.php');
exit;