HTTP est un protocole sans état : il ne dispose pas nativement d’un moyen de conserver des informations d’un utilisateur entre les requêtes.
La session de Laravel fournit ce moyen sur plusieurs requêtes.État de connexion, contenu d’un panier, valeurs saisies dans un formulaire… placez en session tout ce que vous voulez conserver entre les requêtes.
La configuration se trouve dans config/session.php.
Vous changez le driver via la variable SESSION_DRIVER (dans .env).
SESSION_DRIVER=database
Drivers pris en charge par défaut :
Driver
Description
file
Stocke en fichiers sous storage/framework/sessions (par défaut)
cookie
Stocke dans un cookie chiffré côté navigateur
database
Stocke dans une table de la base
redis
Stocke dans Redis (rapide)
array
Stocke dans un tableau PHP (utilisé pour les tests, non persistant)
Le projet Laravel par défaut est configuré avec le driver database. Une table sessions est nécessaire, mais elle est fournie par la migration par défaut.
Le helper session() est utilisable depuis n’importe où (contrôleurs, vues…).
// Lire une valeur$value = session('key');// Avec une valeur par défaut$value = session('key', 'valeur par défaut');// Écrire une valeursession(['key' => 'value']);
Les deux approches se testent avec assertSessionHas. Dans un contrôleur, $request->session() rend la dépendance explicite.
// Lire une clé$value = $request->session()->get('key');// Avec valeur par défaut$value = $request->session()->get('key', 'default');// Valeur par défaut via une closure$value = $request->session()->get('key', function () { return 'default';});// Toutes les données de session$data = $request->session()->all();
// true si présent et non nullif ($request->session()->has('user_id')) { // ...}// true si présent, même si nullif ($request->session()->exists('user_id')) { // ...}// true si absentif ($request->session()->missing('user_id')) { // ...}
// Via l'instance Request$request->session()->put('user_name', 'Tanaka');// Via le helpersession(['user_name' => 'Tanaka']);// Ajouter à un tableau$request->session()->push('cart.items', ['id' => 1, 'name' => 'Article A']);
// Supprimer une clé$request->session()->forget('user_name');// Plusieurs clés à la fois$request->session()->forget(['user_name', 'cart']);// Tout supprimer$request->session()->flush();
Les données flash sont des données de session valides uniquement pour la requête suivante.
Utiles pour les messages de confirmation d’un formulaire ou les erreurs à afficher une seule fois.
// Prolonge toutes les données flash d'une requête supplémentaire$request->session()->reflash();// Prolonge certaines clés uniquement$request->session()->keep(['status', 'message']);
En cas d’échec de validation, combinez avec back()->withErrors().
Laravel place automatiquement les erreurs en flash data : la variable $errors est disponible dans Blade.
public function store(Request $request): RedirectResponse{ $validated = $request->validate([ 'title' => 'required|string|max:255', 'body' => 'required|string', ]); Post::create($validated); // Succès : redirection avec message flash return redirect() ->route('posts.index') ->with('success', 'Publication créée.'); // En cas d'échec de validation, Laravel exécute automatiquement back()->withErrors()->withInput()}