2.3 KiB
Subdomain & Session Handling – Optimierungsvorschlag (GPT-5)
Dieses Paket enthält einen sauberen, zweistufigen Ansatz für Domain- und Session-Handling, um Probleme mit doppelt initialisierten Sessions und inkonsistenten user_shop-Zuständen zu vermeiden. Es ändert keine bestehenden Dateien. Integration ist in INTEGRATION.md beschrieben.
Ziele
- Frühe Domain-Auflösung ohne Session-Zugriff (vermeidet doppelte Session-Erstellung)
- Späte, robuste Session-/Cookie-Synchronisierung (Sticky-UserShop über Subdomains)
- Kompakte, gut getestete Einheiten (Middleware + Service)
- Abwärtskompatible Session-Keys optional möglich (für schrittweise Migration)
Architektur (Kurzfassung)
-
DomainBootstrap (früh, vor StartSession):
- Parst Host →
DomainContext(ohne Sessionzugriff) - Setzt
config('session.domain')undconfig('app.url')frühzeitig - Hinterlegt
DomainContextim Container/Request-Attribute
- Parst Host →
-
DomainSessionSync (spät, nach StartSession):
- Synchronisiert
user_shopin Session und Cookie (sticky über Subdomains) - Nutzt
UserShopSessionManager(Service) - Hält sich strikt an die „kein Sessionzugriff vor StartSession“-Regel
- Synchronisiert
-
UserShopSessionManager:
- Vereinheitlicht Lesen/Schreiben von
user_shop(Session + Cookie) - Optional: Legacy-Keys (
session('user_shop')) für Bestands-Views/Controller setzen
- Vereinheitlicht Lesen/Schreiben von
Dateien
src/Http/Middleware/DomainBootstrap.phpsrc/Http/Middleware/DomainSessionSync.phpsrc/Services/UserShopSessionManager.phpconfig/example.subdomain_optimization.php(Beispielkonfiguration)INTEGRATION.md(Reihenfolge/Registrierung & Migrationspfad)docs/ADR-001-domain-session-handling.md(Entscheidungsdokumentation)
Warum dieser Ansatz?
Die aktuelle Logik greift in Teilen zu früh auf die Session zu, bevor die Kernel-StartSession-Middleware aktiv ist. Das kann zu zwei Session-IDs in einem Request führen und verhindert ein konsistentes Sticky-Shop-Verhalten über in. und checkout.. Der zweistufige Ansatz trennt strikt:
- Domänenauflösung/Kontext (rein, keine Session)
- Zustandssynchronisierung (nur nach Start der Session)
Damit werden doppelte Sessions vermieden und der user_shop zuverlässig über Subdomains hinweg getragen.
Weitere Details siehe INTEGRATION.md und docs/ADR-001-domain-session-handling.md.