HTTP ist ein zustandsloses Protokoll: Es gibt keinen eingebauten Mechanismus, um Nutzerinformationen zwischen Requests zu erhalten.
Die Session-Funktion von Laravel liefert das Fehlende: Sie hält Daten über mehrere Requests hinweg.Login-Status, Warenkorb-Inhalte, Zwischenstände bei mehrstufigen Formularen – alles, was zwischen Requests bestehen bleiben soll, legen Sie in der Session ab.
Die Konfiguration liegt in config/session.php.
Der Treiber wird über die Variable SESSION_DRIVER in der .env gewählt.
SESSION_DRIVER=database
Laravel bringt folgende Standard-Treiber mit:
Treiber
Kurzbeschreibung
file
Ablage als Datei in storage/framework/sessions (Default)
cookie
Verschlüsseltes Cookie im Browser
database
Speicherung in einer DB-Tabelle
redis
Speicherung in Redis (sehr schnell)
array
PHP-Array (nur für Tests, überlebt keinen Request)
Die Laravel-Standardprojekte sind auf database gesetzt. Der database-Treiber benötigt die Tabelle sessions, die in den Standard-Migrationen bereits vorhanden ist.
// Nach Schlüssel$value = $request->session()->get('key');// Mit Default$value = $request->session()->get('key', 'default');// Default als Closure$value = $request->session()->get('key', function () { return 'default';});// Alle Werte$data = $request->session()->all();
// Vorhanden und nicht nullif ($request->session()->has('user_id')) { // ...}// Existiert, auch wenn nullif ($request->session()->exists('user_id')) { // ...}// Nicht vorhandenif ($request->session()->missing('user_id')) { // ...}
// Via Request$request->session()->put('user_name', 'Tanaka');// Via Helpersession(['user_name' => 'Tanaka']);// In ein Array pushen$request->session()->push('cart.items', ['id' => 1, 'name' => 'Produkt A']);
// Alle Flash-Daten um einen Request verlängern$request->session()->reflash();// Nur bestimmte Schlüssel$request->session()->keep(['status', 'message']);
Bei fehlgeschlagener Validierung nutzen Sie back()->withErrors().
Laravel legt die Fehler automatisch als Flash ab, sodass in Blade $errors verfügbar ist.
public function store(Request $request): RedirectResponse{ $validated = $request->validate([ 'title' => 'required|string|max:255', 'body' => 'required|string', ]); Post::create($validated); // Erfolg: mit Flash weiterleiten return redirect() ->route('posts.index') ->with('success', 'Beitrag erstellt.'); // Bei Validierungsfehler führt Laravel automatisch back()->withErrors()->withInput() aus}