# 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')` und `config('app.url')` frühzeitig
  - Hinterlegt `DomainContext` im Container/Request-Attribute

- DomainSessionSync (spät, nach StartSession):

  - Synchronisiert `user_shop` in Session und Cookie (sticky über Subdomains)
  - Nutzt `UserShopSessionManager` (Service)
  - Hält sich strikt an die „kein Sessionzugriff vor StartSession“-Regel

- UserShopSessionManager:
  - Vereinheitlicht Lesen/Schreiben von `user_shop` (Session + Cookie)
  - Optional: Legacy-Keys (`session('user_shop')`) für Bestands-Views/Controller setzen

## Dateien

- `src/Http/Middleware/DomainBootstrap.php`
- `src/Http/Middleware/DomainSessionSync.php`
- `src/Services/UserShopSessionManager.php`
- `config/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`.
