Mémorisez vos visiteurs de page en page : connexion sécurisée, panier en session et cookies correctement protégés.
Ouvrir cette leçon dans KodokonHTTP ne mémorise rien : chaque requête arrive vierge, sans lien avec la précédente. Les sessions résolvent ce problème : session_start() associe au visiteur un identifiant unique, transmis dans un cookie, et un espace de stockage côté serveur accessible via $_SESSION. Appelez session_start() tout en haut de chaque page concernée, avant le moindre affichage.
<?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 "Identifiants invalides.";Protéger une page revient à vérifier la présence de l'utilisateur en session, et rediriger sinon. La session sert aussi de stockage temporaire idéal pour un panier : un tableau associatif id produit => quantité survit de page en page.
<?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 "Panier : " . $count . " article(s)";Les cookies, eux, vivent chez l'utilisateur et survivent à la fermeture du navigateur : parfaits pour un thème ou une préférence de langue. Depuis PHP 7.3, setcookie() accepte un tableau d'options : exigez secure (HTTPS uniquement), httponly (invisible au JavaScript) et samesite (limite l'envoi depuis d'autres sites).
<?php
setcookie('theme', 'dark', [
'expires' => time() + 60 * 60 * 24 * 30,
'path' => '/',
'secure' => true,
'httponly' => true,
'samesite' => 'Lax',
]);
$theme = $_COOKIE['theme'] ?? 'light';
echo "Thème actif : " . $theme;La déconnexion doit être aussi soignée que la connexion : videz $_SESSION, détruisez la session côté serveur et faites expirer le cookie qui portait l'identifiant.
<?php
session_start();
$_SESSION = [];
session_destroy();
setcookie(session_name(), '', time() - 3600, '/');
header('Location: /login.php');
exit;