05. Nov. 2025·6 Min. Lesezeit

SameSite-Cookie-Einstellungen: Secure, Domain-Bereich und Subdomains

SameSite-Cookie-Einstellungen erklärt: So beheben Sie Secure-, HttpOnly-, Domain- und Subdomain-Verhalten, damit Anmeldungen in der Produktion zuverlässig funktionieren.

SameSite-Cookie-Einstellungen: Secure, Domain-Bereich und Subdomains

Warum Auth in der Produktion bricht, wenn Cookies falsch konfiguriert sind

Wenn die Anmeldung auf localhost funktioniert, auf Ihrer echten Domain aber fehlschlägt, liegt das Problem oft nicht an Passwortprüfungen oder der Datenbank. Es ist das Cookie.

Lokales Testen ist nachsichtig: alles läuft auf einem Host, oft über HTTP, und Redirects sind einfacher. In der Produktion setzen Browser strengere Regeln durch. Kleine Cookie-Details entscheiden, ob der Browser Ihre Session überhaupt zurück an den Server schickt.

Die Symptome wirken manchmal nicht zusammenhängend:

  • Das Login-Formular wird abgesendet, aber Sie landen wieder auf der Anmeldeseite
  • Eine Redirect-Schleife zwischen /login und /app
  • Sessions, die nach einem Refresh verschwinden
  • In einem Browser funktioniert es, im anderen nicht

Produktionsumgebungen fügen Variablen hinzu: HTTPS, CDNs oder Proxies, separate Subdomains (z. B. app.example.com und api.example.com) und Redirects über Drittanbieter (OAuth, Zahlungsseiten, E-Mail-Magic-Links). Genau hier beginnen SameSite, Secure und Cookie-Scoping wichtig zu werden.

Ein Cookie ist nicht nur „ein Session-Token“. Es ist auch ein Satz Regeln, der dem Browser sagt, wann dieses Token zurückgeschickt werden darf.

Fehlkonfigurationen brechen Auth meist auf ein paar vorhersehbare Arten:

  • Der Browser sendet das Cookie auf der Anfrage, die die Session erstellt oder prüft, nie mit (oft SameSite oder Domain-Scope).
  • Der Browser lehnt den Cookie ab, weil Secure nicht gesetzt ist, obwohl es nötig wäre.
  • Der Cookie ist auf die falsche Domain oder den falschen Path gescoped, sodass er die benötigten Routen nicht erreicht.
  • Zwei Cookies mit demselben Namen existieren (alt und neu, Staging und Prod) und der Browser sendet einen anderen, als Sie erwarten.

Beispiel: Lokal funktioniert alles unter http://localhost:3000, aber nach dem Deploy zu app.yourdomain.com setzt Ihre API ein host-only Session-Cookie für api.yourdomain.com. Ihr Frontend sendet es nie, also sieht jede Seitenanfrage wie ausgeloggt aus.

Die meisten „eingeloggt“-Erfahrungen basieren auf einem Cookie, das Ihre Session repräsentiert. Nachdem Sie Ihr Passwort eingegeben haben, sendet der Server ein Cookie in der Antwort und der Browser speichert es. Bei späteren Requests hängt der Browser dieses Cookie automatisch an, damit der Server Sie wiedererkennt.

Viel Verwirrung entsteht durch das Vermischen dreier verwandter Ideen:

  • Session-Cookie: ein Identifier, den der Server nachschlägt (oft in DB oder Cache).
  • Access-Token: eine kurzlebige Berechtigung (häufig für APIs verwendet).
  • Refresh-Token: länger gültig, um ein neues Access-Token zu bekommen.

Produktions-Auth-Bugs tauchen oft auf, wenn eine App einen Ansatz erwartet, aber einen anderen implementiert. Beispiel: Das Frontend erwartet Cookie-basierte Sessions, das Backend gibt aber Token aus, die für einen Authorization-Header gedacht sind.

Für Cookie-basierte Auth sind die Attribute genauso wichtig wie der Wert:

  • SameSite: steuert, wann Cookies in Cross-Site-Kontexten gesendet werden.
  • Secure: Cookie wird nur über HTTPS gesendet.
  • HttpOnly: verhindert, dass JavaScript das Cookie liest.
  • Domain: welche Hostnamen es erhalten dürfen.
  • Path: welche URL-Pfade es erhalten dürfen.

Browser senden Cookies nicht automatisch. Sie tun es nur, wenn Domain und Path passen, die Verbindung Secure erfüllt ist und der Request-Kontext die SameSite-Regeln besteht.

Ein klassischer Produktions-Fehler: Lokal ist alles localhost, in Produktion ist das Frontend auf https://app.example.com und die API auf https://api.example.com. Wenn Domain oder SameSite auch nur leicht falsch sind, gibt es eine Login-Schleife.

SameSite: was es tut und wann es Ihre Anmeldung blockiert

SameSite ist ein Cookie-Flag, das dem Browser sagt, wann er Ihr Session-Cookie senden darf. Viele „funktioniert lokal, bricht in Produktion“ Probleme entstehen durch SameSite-Einstellungen, die nicht zum echten Anmeldeflow passen.

Lax vs Strict vs None (kurz erklärt)

SameSite=Strict ist am restriktivsten. Der Cookie wird nur in einem First-Party-Kontext gesendet. Kommt ein Nutzer von einer anderen Seite, kann der Browser das Cookie zurückhalten.

SameSite=Lax ist die Standardeinstellung, die für viele Apps funktioniert. Der Cookie wird typischerweise bei normalen Top-Level-Navigationen (z. B. Linkklicks) gesendet, aber nicht bei den meisten Cross-Site-Background-Requests.

SameSite=None bedeutet „erlaube diesen Cookie in Cross-Site-Kontexten“. Moderne Browser verlangen Secure, wenn None gesetzt ist, sonst verwerfen sie den Cookie.

Was häufig Brüche auslöst

Zu strenge SameSite-Einstellungen brechen oft:

  • OAuth-Logins (Google, GitHub), bei denen der Nutzer zurückgeleitet wird
  • eingebettete Apps (Ihre App in einem iframe auf einer anderen Domain)
  • Flows, bei denen Frontend und API vom Browser als cross-site betrachtet werden

Browser-Defaults haben sich über die Zeit geändert. Cookies ohne explizites SameSite werden oft als Lax behandelt, und Cookies mit None ohne Secure werden häufig abgelehnt.

Wann brauchen Sie wirklich SameSite=None? Verwenden Sie es nur, wenn das Session-Cookie in einem Cross-Site-Kontext gesendet werden muss (iframes, echte Cross-Site-Setups, einige Redirect-basierte Flows). Wenn alles same-site ist, reicht oft Lax und reduziert Risiken.

Secure-Cookies und HTTPS: die häufigste Produktions-Falle

Ein Cookie mit Secure wird nur über HTTPS gesendet. Das klingt simpel, ist aber einer der Hauptgründe, warum Logins lokal funktionieren und nach Deploy fehlschlagen.

Eine Regel verwirrt viele: Setzen Sie SameSite=None, verlangen moderne Browser, dass der Cookie auch Secure ist. Ohne Secure kann der Browser den Cookie stillschweigend fallenlassen.

Lokale Entwicklung führt viele in die Irre. Viele Apps laufen auf http://localhost, daher wird Secure weggelassen, um das Testen zu erleichtern. Dann läuft die Produktion über HTTPS, jemand stellt SameSite=None für einen Redirect- oder Embedded-Flow ein, und der Cookie bleibt nicht erhalten.

Proxies und CDNs können das verschlimmern. Ihr Browser ist per HTTPS verbunden, aber Ihr App-Server sieht die eingehende Anfrage möglicherweise als HTTP, weil TLS am Proxy endet. Wenn die App denkt „ich bin auf HTTP“, setzt sie vielleicht kein Secure oder erzeugt Redirects, die zwischen HTTP und HTTPS hin- und herspringen.

Wenn Cookies nur auf der Live-Site verschwinden, prüfen Sie:

  • In DevTools: zeigt das Auth-Cookie Secure und ist die Request-URL https://...?
  • Achten Sie auf Warnungen wie „cookie was blocked because it had SameSite=None without Secure“
  • Überprüfen Sie Proxy-Header (oft X-Forwarded-Proto: https) und ob Ihr Framework dem Proxy vertraut
  • Stellen Sie sicher, dass Nutzer nicht die HTTP-Version der Seite erreichen können
  • Bestätigen Sie, dass das Cookie auf der finalen Domain nach Redirects gesetzt wird, nicht auf einem Zwischen-Host

Wenn Ihr Session-Cookie in JavaScript lesbar ist, kann jeder XSS-Fehler zu einer vollständigen Übernahme eines Accounts führen. Deshalb ist HttpOnly wichtig. Mit HttpOnly sendet der Browser das Cookie weiterhin bei Requests, aber document.cookie kann es nicht lesen.

Auth in einem für JS lesbaren Cookie zu speichern wirkt für SPAs oft bequem, erhöht aber meist das Risiko ohne echten Nutzen. Wenn das Frontend wissen muss, ob der Nutzer angemeldet ist, rufen Sie einen leichten Endpoint wie /me auf und lassen den Server anhand des Cookies entscheiden.

CSRF ist die andere Seite der Medaille. Cookies werden automatisch gesendet, daher kann eine bösartige Seite versuchen, Requests aus einem eingeloggten Browser auszulösen. SameSite hilft, aber zustandsändernde Requests brauchen dennoch CSRF-Schutz.

Praktische Regeln, die die UX einfach halten und die Sicherheit erhöhen:

  • Bewahren Sie das Session-Token nur in einem HttpOnly Cookie auf (nicht in localStorage).
  • Verwenden Sie CSRF-Schutz für zustandsändernde Requests.
  • Scope Cookies eng (Host und Path), sodass weniger Requests Ihre Session tragen.

Ein Kompromiss: Wenn Sie Cookies für API-Auth verwenden, kann Ihre SPA sie nicht manuell anhängen. Sie ist auf den Browser angewiesen, daher müssen CORS- und Credentials-Einstellungen korrekt sein.

Domain- und Path-Scoping: verhindern, dass Cookies an die falsche Stelle gehen

Prototypen produktionsreif machen
FixMyMess repariert fehlerhafte AI-generierte Codes und bereitet sie für die Produktion vor.

Cookie-Bugs sehen oft aus wie „zufällige Logouts“ oder „funktioniert lokal, aber nicht nach dem Deploy“. Domain und Path bestimmen, wohin der Browser Ihr Auth-Cookie sendet. Wenn sie nicht zu Ihren echten URLs passen, sieht der Server den Cookie nie und behandelt den Nutzer als ausgeloggt.

Selbst perfekte SameSite-Einstellungen helfen nicht, wenn der Cookie gar nicht gesendet wird.

Host-only vs. Domain-Cookies

Wenn Sie das Domain-Attribut nicht setzen, bekommen Sie ein host-only Cookie. Es ist an den genauen Host gebunden, der es gesetzt hat, z. B. app.example.com.

Setzen Sie Domain=.example.com, wird der Cookie für Subdomains wie app.example.com und api.example.com verfügbar. Das kann nützlich sein, weitet aber auch aus, wohin der Cookie gesendet wird, und erhöht die Chance, dass eine Subdomain einen anderen Cookie mit demselben Namen überschreibt.

Path-Scoping in Multi-App-Setups

Path ist der URL-„Ordner“, in dem der Cookie gültig ist. Path=/ sendet den Cookie an jeden Pfad dieses Hosts. Path=/app sendet ihn nur an /app und darunter.

Ein häufiger Fehler: Der Cookie wird auf Path=/api gesetzt, weil er auf einer API-Route erstellt wurde, und dann wundert man sich, warum Seiten unter /app nicht eingeloggt bleiben.

Schnelle Checks, die viele Produktions-Auth-Probleme verhindern:

  • Wählen Sie einen kanonischen Host (www oder ohne www) und bleiben Sie dabei.
  • Wenn Sie Auth über Subdomains teilen müssen, verwenden Sie ein Parent-Domain-Cookie. Andernfalls lassen Sie Domain unset.
  • Verwenden Sie Path=/, es sei denn, Sie haben einen klaren Grund zur Isolierung.
  • Vermeiden Sie die Wiederverwendung desselben Cookie-Namens über verschiedene Apps mit unterschiedlichen Scopes.
  • Verifizieren Sie, welcher Host den Cookie nach Redirects tatsächlich setzt.

Ein übliches Setup ist app.example.com für das Frontend und api.example.com für das Backend. Das wirkt einfach, aber Cookie-Regeln können sich zwischen lokaler Entwicklung und Produktion verschieben, sobald HTTPS, Proxies und echte Domains im Spiel sind.

Ist ein Cookie host-only, wird ein von api.example.com gesetzter Cookie nicht an app.example.com gesendet und umgekehrt. Wenn Sie wirklich einen Cookie über beide Domains hinweg benötigen, setzen Sie ihn typischerweise auf die Parent-Domain.

Bevor Sie Cookies über Subdomains teilen, prüfen Sie:

  • Brauchen Sie wirklich denselben Cookie auf beiden Subdomains, oder kann die API allein setzen und lesen?
  • Nutzen Sie HTTPS durchgängig, auch hinter Load Balancer oder CDN?
  • Stimmen Ihre SameSite-Einstellungen damit überein, wie der Browser Ihre Requests klassifiziert (same-site vs cross-site)?

Denken Sie auch an CORS und Cookies: Selbst wenn der Cookie korrekt gescoped ist, hängt der Browser ihn nicht an API-Requests, es sei denn, Ihr Fetch/XHR benutzt credentials und die API erlaubt Credentials mit einem expliziten Origin.

Cookies über Subdomains zu teilen ist nicht immer sinnvoll. Ein breites Domain-Cookie erhöht, wohin der Cookie gesendet werden kann. Halten Sie Auth-Cookies so eng wie möglich und weiten Sie den Scope nur bei klarer Notwendigkeit.

Auth-Risiken früh erkennen
Wir scannen Ihre AI-erstellte App auf geleakte Schlüssel und riskante Auth-Muster.

Eine sichere Cookie-Konfiguration beginnt mit dem realen Nutzerfluss, nicht mit einer Framework-Standardeinstellung. Was auf localhost funktioniert, kann nach Deploy scheitern, weil Produktion HTTPS, Redirects und separate Hosts hinzufügt.

Eine praktische Checkliste

Mapen Sie Ihren Login-Flow End-to-End und lassen Sie den Cookie dazu passen:

  • Mappen Sie den echten Login-Flow (inkl. Redirects). Schreiben Sie jeden Schritt auf: App, Auth-Provider, Callback-URL, Dashboard.
  • Entscheiden Sie, wo die Session leben soll. Wählen Sie einen Ort, der konsistent setzt und liest (oft die API).
  • Wählen Sie SameSite basierend auf dem Flow. Nutzen Sie None nur, wenn Sie wirklich Cross-Site-Cookie-Senden brauchen. Ansonsten ist Lax meist ausreichend.
  • Erzwingen Sie HTTPS und setzen Sie Secure und HttpOnly. Wenn Sie SameSite=None nutzen, müssen Sie Secure setzen.
  • Setzen Sie Domain und Path bewusst. Weiten Sie den Scope nur bei Bedarf. Für die meisten Auth-Cookies ist Path=/ passend.

Validieren Sie auf der echten Produktionsdomain in einem Inkognito-Fenster: einloggen, hartes Neuladen, neuen Tab öffnen und bestätigen, dass der Cookie vorhanden ist und bei relevanten Requests gesendet wird.

Häufige Fehler, die schwer zu debuggen sind

Cookie-Probleme wirken zufällig, weil sie oft erst nach Deployment auftreten. Kleine Unterschiede (HTTPS, echte Domain, Proxy, separater API-Host) lassen Browser-Regeln entscheidend werden.

Die Fehler hinter den meisten Login-Schleifen und „nach Refresh ausgeloggt“-Meldungen:

  • SameSite=None setzen, aber Secure vergessen (Browser verwirft den Cookie).
  • Domain zu breit setzen und unbeabsichtigt Cookies mit anderen Subdomains teilen.
  • HTTP und HTTPS hinter einem Proxy mischen, sodass die App Cookies oder Redirects basierend auf dem falschen Schema setzt.
  • Auf localhost-Verhalten vertrauen, das mit echten Domains nicht übereinstimmt.
  • CORS als einzige Ursache ansehen — CORS kann eine Anfrage erlauben, aber Cookies können trotzdem durch Scope oder SameSite blockiert werden.

Beispiel: Sie deployen app.example.com (Frontend) und api.example.com (Backend). Sie aktualisieren SameSite, um Cross-Site-Verhalten zu erlauben, vergessen aber Secure. In Produktion verwirft der Browser das Session-Cookie und jeder Refresh sieht nach einem neuen Besuch aus.

Quick-Checks vor dem Release (und bei Bugreports)

Die meisten Cookie-Probleme werden offensichtlich, wenn Sie drei Stellen prüfen: den Cookie-Speicher des Browsers, die Netzwerk-Anfrage und den serverseitigen Ablehnungsgrund.

In DevTools (Application/Storage) klicken Sie den Cookie an und prüfen:

  • Ist der Cookie nach dem Login vorhanden und bleibt er nach einem Reload bestehen?
  • Stimmen SameSite, Secure, HttpOnly, Domain und Path mit Ihren Erwartungen überein?
  • Sieht Expires oder Max-Age vernünftig aus?
  • Setzen Sie versehentlich zwei Cookies mit demselben Namen auf unterschiedlichen Domains?
  • Wird der Cookie vom Host gesetzt, den Sie erwarten (App vs API)?

Dann prüfen Sie den Network-Tab. Untersuchen Sie eine authentifizierte Anfrage (z. B. GET /me). Wenn der Cookie im Speicher ist, aber nicht in der Anfrage, blockieren die Attribute das Senden oder die Anfrage geht an einen anderen Host als gedacht.

Zuletzt: Verifizieren Sie HTTPS End-to-End. Wenn TLS am Load Balancer endet, aber Proxy-Header fehlen, setzt die App womöglich nicht-Secure Cookies oder erzeugt Redirects, die die Session zerstören.

Wenn möglich, loggen Sie serverseitig einen klaren Grund für die Session-Ablehnung: fehlender Cookie, abgelaufene Session, ungültige Signatur, CSRF-Fehlschlag usw.

Beispiel: Login-Schleife nach Deploy wegen SameSite und Domain

Mit weniger Überraschungen ausliefern
Erhalten Sie eine klare Liste von Auth- und Cookie-Fixes vor Ihrem nächsten Release.

Eine typische Geschichte: OAuth-Login funktioniert lokal, bricht aber nach Deploy auf https://app.example.com. Nutzer klicken „Continue with Google“, werden zurückgeleitet, sehen kurz eingeloggt aus und landen dann wieder auf der Login-Seite.

Meistens liegt es an einem Cookie-Mismatch über den OAuth-Redirect und Ihre Subdomains.

Lokal sind App und API möglicherweise beide unter localhost, sodass der Browser das Session-Cookie überall hinschickt. Nach dem Deploy sieht der Flow oft so aus:

  1. Der OAuth-Provider redirectet den Nutzer zu https://app.example.com/auth/callback.

  2. Der Callback setzt ein Session-Cookie, aber es ist host-only für app.example.com (kein Domain-Attribut).

  3. Das Frontend ruft https://api.example.com/me auf, um den angemeldeten Nutzer zu holen.

  4. Der Browser sendet den Cookie nicht an api.example.com, also gibt die API 401 zurück. Die App interpretiert das als „nicht eingeloggt“ und startet den Login-Flow neu.

SameSite kann das verschlimmern. Wenn der während des OAuth-Callbacks verwendete Cookie SameSite=Strict ist, sendet der Browser ihn womöglich nicht bei dem Cross-Site-Redirect vom Provider, sodass Ihr Server state nicht abgleichen kann und der Flow scheitert.

Praktischer Fix-Plan:

  • Setzen Sie Secure=true in Produktion (besonders wenn Sie SameSite=None nutzen).
  • Verwenden Sie SameSite=Lax für typische Login-Sessions und OAuth-State-Cookies (das übersteht meist Top-Level-Redirects).
  • Wenn die API wirklich denselben Cookie braucht, scope ihn auf die Parent-Domain und halten Sie Path konsistent.

Zur Bestätigung, ohne zu raten:

  • Prüfen Sie Domain, Path, SameSite und Secure im Cookie-Eintrag.
  • Prüfen Sie in der fehlschlagenden API-Anfrage, ob der Cookie-Header vorhanden ist.
  • Achten Sie auf Hinweise in der Cookie-Ansicht (Browser erklären oft, warum ein Cookie geblockt wurde).

Nächste Schritte: absichern und Hilfe holen, wenn es weiter flaky bleibt

Haben Sie eine Cookie-Konfiguration gefunden, die funktioniert, schreiben Sie sie als Regel auf — nicht als Vermutung: die genauen Werte für SameSite, Secure, HttpOnly, Domain und Path plus Unterschiede zwischen lokal, Staging und Produktion.

Behalten Sie einen kleinen Testplan, den Sie vor Releases wiederholen: einloggen, Refresh, neuer Tab, Inkognito-Fenster und ein zweiter Browser (Chrome und Safari zeigen Unterschiedliches oft schnell).

Wenn Sie mit einem AI-generierten Prototyp arbeiten, der auf echten Domains bricht, ist es oft einer der üblichen Verdächtigen: fehlendes Secure, mismatchtes Domain/Path, Cookies vom falschen Host nach Redirects oder Cross-Site-Verhalten, das der Browser blockiert.

Wenn Sie eine zweite Meinung wollen: FixMyMess (fixmymess.ai) spezialisiert sich darauf, fehlerhafte AI-generierte Apps in produktionsreife Projekte zu verwandeln, inklusive Diagnose von Cookie- und Auth-Flows. Ein kurzes Audit reicht oft, um die genaue Attribut- oder Redirect-Stelle zu finden, die die Session kaputt macht.

Häufige Fragen

Warum funktioniert die Anmeldung auf localhost, aber nicht nach dem Deployment?

Meistens schickt der Browser das Session-Cookie auf Ihrer Produktionsdomain nicht zurück. Lokal teilen sich alle Dinge denselben Host, aber in Produktion sorgen HTTPS, Subdomains und Redirects für strengere Regeln. Ein leicht falsches SameSite, Secure, Domain oder Path kann dazu führen, dass der Server denkt, Sie seien nicht eingeloggt.

Was verursacht die „/login“ ↔ „/app“ Redirect-Schleife?

Eine Redirect-Schleife bedeutet oft, dass beim Login ein Cookie gesetzt wird, die nächste Anfrage, die die Session prüft, dieses Cookie aber nicht enthält. Häufige Ursachen sind ein Cookie, das für den falschen Host scoped ist (App vs. API-Subdomain), SameSite, das den Cookie bei Redirects blockiert, oder dass ein Cookie mit SameSite=None ohne Secure verworfen wird.

Welche SameSite-Einstellung sollte ich für die meisten Auth-Cookies verwenden?

Beginnen Sie mit SameSite=Lax für typische Web-App-Login-Sessions — das übersteht in der Regel normale Top-Level-Navigationen und viele OAuth-Redirects. Verwenden Sie SameSite=None nur, wenn der Cookie wirklich in Cross-Site-Kontexten gebraucht wird (iframes, echte Cross-Site-Setups) — und dann immer mit Secure.

Warum erfordert SameSite=None Secure?

Moderne Browser lehnen SameSite=None-Cookies ab, wenn sie nicht gleichzeitig Secure sind. Secure bedeutet, der Cookie darf nur über HTTPS gesendet werden. Vergisst man Secure, kann der Browser den Cookie stillschweigend verwerfen, sodass jede Aktualisierung wie ein ausgeloggter Besuch aussieht.

Warum brechen Secure-Cookies hinter einem CDN oder Reverse-Proxy?

Secure sorgt dafür, dass ein Cookie nur über HTTPS gesendet wird. Das ist korrekt für Produktion, aber wenn TLS an einem Proxy endet, sieht der App-Server möglicherweise eingehende Requests als HTTP — das kann beeinflussen, wie Cookies gesetzt oder Redirects generiert werden. Die Lösung ist meist, HTTPS durchzusetzen und dem Backend korrekte Proxy-Header (z. B. X-Forwarded-Proto: https) vertrauen zu lassen.

Was ist der Unterschied zwischen einem host-only Cookie und einem Domain-Cookie?

Ein host-only Cookie (kein Domain-Attribut) wird nur an den Host gesendet, der es gesetzt hat, z. B. api.example.com. Ein Domain-Cookie wie .example.com ist für mehrere Subdomains gültig. Wenn Ihr Frontend auf app.example.com liegt, das Cookie aber nur host-only für api.example.com gesetzt wurde, sendet das Frontend es nicht an app.example.com und erscheint damit ausgeloggt.

Wie kann das Cookie-Path dazu führen, dass meine Session zufällig „verloren geht“?

Das Path-Attribut beschränkt, wohin auf demselben Host der Cookie gesendet wird. Haben Sie versehentlich Path=/api gesetzt, werden Seiten unter /app den Cookie nicht erhalten, obwohl sie auf derselben Domain sind. Für die meisten Auth-Cookies ist Path=/ die einfachste Wahl, wenn es keinen klaren Grund zur Einschränkung gibt.

Sollte mein Session-Cookie HttpOnly sein, und bricht das meine SPA?

Setzen Sie HttpOnly, damit JavaScript den Session-Cookie nicht lesen kann — das reduziert das Risiko bei XSS deutlich. Ihre SPA sollte den Login-Zustand per Server-Endpunkt (z. B. /me) abfragen, statt ein Token aus document.cookie zu lesen. So bleibt der Zustand genau, ohne Geheimnisse im Client zu offenbaren.

Wie debugge ich schnell, ob der Cookie gesetzt und gesendet wird?

Prüfen Sie zuerst, ob der Cookie nach dem Login vorhanden ist und nach einem harten Reload bestehen bleibt. Dann inspizieren Sie eine authentifizierte Anfrage im Network-Tab und bestätigen Sie, dass der Cookie-Header gesendet wird. Wenn der Cookie gespeichert, aber nicht gesendet wird, liegt es fast immer an SameSite, Secure, Domain, Path oder daran, dass die Anfrage an einen anderen Host geht als gedacht.

Das Auth meiner AI-generierten Prototype ist in Produktion instabil – was soll ich als Nächstes tun?

Bei AI-generierten Apps sind Cookie- und Auth-Einstellungen häufig inkonsistent zwischen lokal und Produktion — besonders bei Subdomains, OAuth-Callbacks und Proxy-Setups. Der schnellste Weg ist ein fokussiertes Audit des realen Login-Flows auf Ihrer Live-Domain, um genau das Attribut oder den Redirect-Schritt zu finden, der die Session verwirft. Wenn gewünscht, kann FixMyMess (fixmymess.ai) Code prüfen und Auth/Cookie-Setups innerhalb kurzer Zeit reparieren.