Deutsch
  • cookie
  • nextjs
  • serverless

Wie man den Fehler 'Cookiegröße überschritten' durch Aufteilen der Cookies behebt

Eine Lösung für den Fehler 'Cookiegröße überschritten': Teilen Sie das Cookie in mehrere kleinere Cookies auf und rekonstruieren Sie sie serverseitig. Diese Lösung funktioniert besonders gut für serverlose Plattformen, ohne dass zusätzliche Infrastruktur erforderlich ist.

Sijie
Sijie
Developer

Kurz gesagt: Wenn Ihre Cookiegröße das 4KB-Browserlimit überschreitet, teilen Sie es in mehrere kleinere Cookies auf und rekonstruieren Sie sie serverseitig. Diese Lösung funktioniert besonders gut für serverlose Plattformen, ohne dass zusätzliche Infrastruktur erforderlich ist.

In den meisten Logto-SDKs für traditionelle Web-Apps speichern wir Sitzungsdaten in HTTP-only-Cookies aus Sicherheitsgründen. So gehen wir vor:

Wenn das SDK Aktionen ausführt, die Sitzungsdaten erfordern, wird es:

  • Verschlüsselt es mit symmetrischer Verschlüsselung
  • Speichert den verschlüsselten String in einem HTTP-only-Cookie
  • Setzt Sicherheitsflaggen, um HTTPS-Übertragungen sicherzustellen

Dieser Ansatz erfordert keinen externen Speicher und kann direkt auf beliebten serverlosen Plattformen wie Vercel ohne zusätzliche Infrastrukturänderungen eingesetzt werden.

Das Problem: Cookiegröße-überschritten-Fehler

Bei der Implementierung der Multi-Organisation-Unterstützung stießen wir jedoch auf eine Einschränkung. Unsere Cookiegröße überschritt das 4KB-Browserlimit, da wir Folgendes speichern mussten:

  • Anmeldedaten und andere Sitzungsdaten
  • ID-Tokens für die Benutzerauthentifizierung
  • Refresh-Tokens
  • Zugriffstokens mit unterschiedlichen Ressourcenindikatoren
  • Organisationstokens, die JWTs mit Nutzlast sind, eins pro Organisation, was ziemlich groß sein kann, wenn mehrere Organisationen gleichzeitig aktiv sind

Dies führte zu dem Fehler:

Browser erzwingen strikte Cookie-Größenbeschränkungen, wobei die meisten einzelne Cookies auf 4KB und die gesamte Cookiegröße auf 8KB pro Domäne beschränken.

Was ist mit der Verwendung von externem Speicher?

Der Einsatz von externem Speicher wie Redis oder einer Datenbank würde zusätzliche Infrastruktur erfordern, was die Kosten und Komplexität für SDK-Anwender erhöht. Das widerspricht unserem Ziel, eine entwicklerfreundliche Lösung bereitzustellen.

Während der Speicher im Hauptspeicher eine Alternative sein könnte, funktioniert er nicht gut in serverlosen Umgebungen, wo Instanzen flüchtig sind und Speicher nicht zwischen Anfragen geteilt wird.

Die Lösung: Aufteilen von Cookies

Eine einfache Lösung besteht darin, große Cookies in kleinere Teile zu zerlegen. Dieser Artikel demonstriert den Ansatz anhand von Next.js als Beispiel:

1. Teilen der Sitzungsdaten

2. Speichern der Teile

3. Rekonstruktion bei Anfrage

Beste Praktiken für die Implementierung

1. Verwaltung der Stückgröße

2. Verwaltung der sauberen Sitzung

Überwachung der gesamten Cookiegröße:

Fazit

Das Aufteilen von Cookies bietet eine elegante Lösung, die sowohl einfach zu implementieren als auch minimal störend für bestehende Anwendungsarchitekturen ist. Durch einfaches Aufteilen großer Cookies in kleinere Stücke können Entwickler Browsergrößenbeschränkungen überwinden, ohne ihren Kernansatz für die Sitzungsverwaltung zu ändern oder externe Abhängigkeiten hinzuzufügen.