Astro
Astro-Sitzungen für serverseitigen Zustand
Geschrieben von Noel
Veröffentlicht:
21 Min. Lesezeit
Themen mit KI-Unterstützung recherchiert; von Noel vor der Veröffentlichung geprüft und überarbeitet.

Thema vertiefen
Weitere Astro-Guides, Glossar-Einträge und Workflows findest du im Themen-Hub.
Astro-Sitzungen sind serverseitiger Speicher für Daten, die zwischen Anfragen auf demand-geladenen Seiten persistieren müssen. Anstatt den Zustand im Browser zu speichern, hält Astro ihn auf dem Server und ermöglicht es Ihrer Seite, Ihrem Endpunkt, Ihrer Middleware oder Ihrer Aktion, ihn zu lesen und zu aktualisieren, wenn eine Anfrage eingeht.
Das ist wichtig, wenn Sie einen gemeinsamen Zustand ohne client-seitiges JavaScript benötigen. Eine Warenkorbanzeige, ein Referenz auf einen angemeldeten Benutzer oder ein teilweise ausgefülltes Formular können in einer Sitzung gespeichert werden und bei der nächsten Anfrage gelesen werden, was die Benutzeroberfläche einfacher und das Datenmodell kontrollierter hält.
Wichtigste Erkenntnisse
- Astro-Sitzungen speichern den Zustand auf dem Server, sodass sie besser geeignet sind als Cookies für größere oder sensiblere Daten zwischen Anfragen.
- Sie sind für demand-geladene Seiten konzipiert, nicht für rein statische Ausgaben.
- Sie können Sitzungsdaten von Seiten, API-Endpunkten, Middleware und Aktionen lesen und schreiben.
- Der Hauptvorteil ist eine einfachere Zustandsverwaltung ohne client-seitiges JavaScript für gängige Abläufe wie Warenkörbe und Formularzustände.
- Die Wahl des Adapters und des Speicher-Treibers ist wichtig, da Sitzungen davon abhängen, wo und wie Ihre App bereitgestellt wird.
Was ist das?
Astro-Sitzungen sind eine integrierte Möglichkeit, Daten zwischen Anfragen in Astro zu teilen. Die kurze Version ist einfach: Der Browser hält eine Sitzungskennung, und Astro verwendet diese Kennung, um die tatsächlichen Daten auf dem Server zu suchen. Die Daten selbst werden nicht im Browser gespeichert, weshalb Sitzungen oft besser geeignet sind als Cookies, wenn der Zustand größer oder sensibler ist.
Ein praktisches Beispiel ist ein Warenkorb im Online-Shop. Bei einer Anfrage fügt ein Benutzer einen Artikel hinzu. Bei der nächsten Anfrage muss die Anzahl der Artikel im Warenkorb weiterhin verfügbar sein, damit die Kopfzeile die aktualisierte Gesamtsumme anzeigen kann. Mit Sitzungen kann der Warenkorb aus Astro.session auf einer Seite oder aus context.session in einem Endpunkt gelesen werden, sodass der Zustand dem Besucher folgt, ohne eine Frontend-Zustandsbibliothek zu benötigen.
Die wichtige Einschränkung ist, dass Sitzungen für demand-geladene Seiten gedacht sind. Wenn eine Seite vollständig statisch ist, gibt es keine serverseitige Ausführung zur Anforderungszeit, um die Sitzung zu lesen. Deshalb passen Sitzungen am besten in Apps, die bereits auf serverseitiges Rendering für Personalisierung, Warenkorbstatus, Authentifizierungs-nahe Abläufe oder Formular-Kontinuität angewiesen sind. Wenn Sie eine rein inhaltsbasierte Seite erstellen, sind Sitzungen möglicherweise unnötiger Overhead.
In der Praxis bedeutet das, dass Sitzungen weniger wie ein allgemeiner Speicherbehälter und mehr wie eine Anforderungszeit-Speicherschicht sind. Sie sind nützlich, wenn die App sich an etwas kurzfristig, sicher und konsistent über die nächsten Anfragen erinnern muss. Wenn die Informationen Monate überdauern sollen, über Geräte hinweg geteilt werden müssen oder für Berichterstattung abgefragt werden sollen, gehören sie woanders hin. Wenn sie nur die aktuelle Interaktion unterstützen müssen, sind Sitzungen normalerweise die sauberere Wahl.
Ein nützliches mentales Modell ist “Server-Speicher mit einem Browserzeiger”. Der Browser besitzt die Daten nicht; er trägt nur den Zeiger, der es dem Server ermöglicht, sie wiederzufinden. Diese Unterscheidung macht Sitzungen anders als lokale Speicherung, Abfragezeichenfolgen oder nur Cookie-Ansätze. Sie erklärt auch, warum Sitzungen gut für Zustände geeignet sind, die im Client nicht sichtbar oder bearbeitbar sein sollten.
Warum es wichtig ist – geschäftliche und technische Auswirkungen
Für Händler ist der größte geschäftliche Wert die Kontinuität. Wenn ein Benutzer etwas in den Warenkorb legt, ein Formular beginnt oder durch einen kurzen mehrstufigen Ablauf navigiert, ermöglichen es Sitzungen, dass die Website diesen Zustand zwischen Anfragen merkt, ohne dass der Browser alles tragen muss. Das kann die Reibung im Kaufprozess verringern und das Erlebnis kohärenter gestalten.
Für Entwickler besteht der technische Wert in der Kontrolle. Cookies haben Größenbeschränkungen und sind dem Client ausgesetzt, sodass sie nicht ideal sind, um reichhaltigere Zustände zu halten. Sitzungen verschieben diese Daten serverseitig, was Ihnen mehr Raum und eine sauberere Trennung zwischen dem, was der Browser sieht, und dem, was die Anwendung speichert, gibt. Das ist wichtig, wenn Sie vermeiden möchten, Implementierungsdetails in den Client zu leaken.
Es gibt auch einen Leistungs- und Architektur-Aspekt. Wenn Sie die Zustandsverwaltung auf dem Server halten können, vermeiden Sie oft zusätzlichen client-seitigen Code, nur um einen Warenkorb oder einen Entwurf eines Formulars zu speichern. Das bedeutet nicht, dass Sitzungen die gesamte Frontend-Arbeit eliminieren, aber sie können die Menge an JavaScript reduzieren, die für gängige Interaktionen zwischen Anfragen benötigt wird. Für Teams, die versuchen, Astro-Seiten schlank zu halten, ist das ein praktischer Vorteil.
Der Nachteil ist operationell: Sitzungen hängen von einem Speichertreiber und von der Bereitstellungsumgebung ab. Daher ist die Entscheidung nicht nur “Kann ich diese Daten speichern?”, sondern “Kann ich sie zuverlässig in der Umgebung speichern, in der diese App läuft?” Deshalb sind Sitzungen ebenso eine Infrastrukturwahl wie eine Anwendungsfunktion.
Ein zweiter geschäftlicher Einfluss ist das Vertrauen. Wenn der Zustand serverseitig lebt, ist es einfacher, sensible oder arbeitsablaufspezifische Informationen aus dem Browser herauszuhalten. Das macht die App nicht automatisch sicher, aber es verringert die Versuchung, Geschäftslogik in der client-seitigen Speicherung zu kodieren. Für Teams, die mit Checkout, Onboarding oder kontobezogenen Abläufen arbeiten, kann diese Trennung die Prüfungen vereinfachen und versehentliche Offenlegungen reduzieren.
Es gibt auch einen praktischen Kostenersparnis-Aspekt. Wenn ein Team Sitzungen für kurzlebigen Zustand nutzen kann, kann es vermeiden, zusätzliche API-Endpunkte, Synchronisierungslogik oder client-seitiges Zustandsmanagement zu erstellen, nur um ein paar Werte zwischen Anfragen zu erhalten. Das kann die Implementierungszeit für kleine Teams verkürzen und die Anzahl der beweglichen Teile reduzieren, die getestet werden müssen. Der Vorteil besteht nicht nur in “sichererem Speicher”; es ist ein einfacherere Anforderungslebenszyklus mit weniger Stellen, an denen der Zustand abdriften kann.
Wie es funktioniert – erklären Sie den Mechanismus Schritt für Schritt
Astro-Sitzungen funktionieren, indem sie eine Sitzungskennung mit serverseitigem Speicher paaren. Der Browser hält die Kennung in einem Cookie, aber die tatsächlichen Sitzungsdaten leben in einem Speicher, der durch Ihren Adapter oder durch einen manuellen Treiber konfiguriert ist. Wenn eine Anfrage eintrifft, verwendet Astro die Kennung, um den richtigen Sitzungsdatensatz zu laden.
Der Ablauf ist unkompliziert. Zuerst trifft eine Anfrage auf eine demand-geladene Seite, einen Endpunkt, Middleware oder eine Aktion. Dann stellt Astro das Sitzungsobjekt über Astro.session oder context.session zur Verfügung. Ihr Code liest vorhandene Werte mit get() oder schreibt neue mit set(). Wenn die Sitzung noch nicht existiert, kann Astro sie automatisch beim ersten Mal generieren, wenn sie verwendet wird.
Von dort aus bleibt die Sitzung über spätere Anfragen bestehen, solange die Kennung gültig bleibt und das Speicher-Backend die Daten noch hat. Wenn Sie die Vertrauensgrenzen zurücksetzen müssen, unterstützt Astro auch die Regenerierung der Sitzung oder deren vollständige Zerstörung. Das ist nützlich nach Login-ähnlichen Ereignissen oder wenn Sie den Zustand am Ende eines Ablaufs löschen möchten.
Wahl des Speichertreibers und Adapters
Sitzungen benötigen einen Speichertreiber. Einige Adapter, einschließlich Node, Cloudflare und Netlify, konfigurieren automatisch einen Standardtreiber für Sitzungen. Andere Adapter erfordern möglicherweise eine manuelle Angabe eines Treibers. In der Praxis bedeutet das, dass der Implementierungsplan mit der Bereitstellung beginnen sollte, nicht mit Code-Snippets.
Wenn Ihre App in einer Umgebung mit einem Standardtreiber läuft, ist die Einrichtung einfacher. Wenn nicht, müssen Sie einen Treiber wählen, der zu Ihren Runtime- und Speicheranforderungen passt. Die kurzen Hinweise, dass Runtime-Überschreibungen knifflig sein können, da die Build-Zeit-Konfiguration oft inline ist. Wenn Sie also einen externen Dienst benötigen, benötigen Sie möglicherweise einen separaten Treiber-Einstiegspunkt.
Ein nützlicher Weg, darüber nachzudenken, ist, dass die Sitzungsfunktion zwei Hälften hat: Identität und Speicherung. Identität ist der cookie-gestützte Zeiger im Browser. Speicherung ist der serverseitige Datensatz hinter diesem Zeiger. Wenn eine der Hälften falsch konfiguriert ist, erscheint die Sitzung fehlerhaft, auch wenn der Anwendungs-Code korrekt aussieht. Deshalb beginnt das Debuggen von Sitzungen oft mit der Überprüfung des Adapters, dann des Treibers und schließlich des Anfragepfads.
Datentypen und Serialisierung
Astro-Sitzungsdaten werden mit devalue serialisiert und deserialisiert, derselben Bibliothek, die in Inhaltskollektionen und Aktionen verwendet wird. Das bedeutet, dass Sie unterstützte Typen wie Strings, Zahlen, Date, Map, Set, URL, Arrays und einfache Objekte speichern können. Sie sind nicht auf einen einzigen String-Wert beschränkt.
Diese Flexibilität ist nützlich, sollte jedoch kein loses Daten-Design fördern. Eine Sitzung sollte immer noch fokussierten Anforderungszustand halten, nicht eine vollständige Anwendungsdatenbank. Je disziplinierter das Schema, desto einfacher ist es, über die Bedeutung der Sitzung nachzudenken und wann sie gelöscht werden sollte.
Die Serialisierung beeinflusst auch, wie Sie Updates modellieren. Wenn Sie einen Warenkorb als Array von Produkt-IDs speichern, bleibt die Sitzung einfach und portabel. Wenn Sie ein tief verschachteltes Objekt mit Anzeigebezeichnungen, Preis-Snapshots und Benutzernotizen speichern, wird die Sitzung schwerer zu entwickeln. Eine gute Regel ist, den minimalen Zustand zu speichern, der benötigt wird, um die Seite oder den Ablauf fortzusetzen, und den Rest aus Ihrer normalen Datenquelle abzurufen.
Wo Sie darauf zugreifen können
Astro stellt den Sitzungszugriff an mehreren Stellen zur Verfügung. In .astro-Komponenten und Seiten verwenden Sie das globale Astro-Objekt. In API-Endpunkten, Middleware und Aktionen ist die Sitzung auf context verfügbar. Das macht es möglich, den gleichen Zustand aus verschiedenen Schichten der App zu lesen und zu schreiben.
Das ist der Schlüsselarchitekturpunkt: Sitzungen sind keine Seitenfunktion. Sie können einen Anfragelebenszyklus unterstützen. Eine Seite kann die Warenkorbanzeige anzeigen, ein Endpunkt kann einen Artikel hinzufügen, Middleware kann eine Besuchszeit stempeln, und eine Aktion kann einen Formularschritt aktualisieren. Die Sitzung wird zu einem gemeinsamen serverseitigen Faden über diese Anfragen hinweg.
Anwendungsfälle – wo Teams das tatsächlich anwenden
Der häufigste Anwendungsfall ist der Warenkorbstaat. Ein Händler möchte möglicherweise, dass die Kopfzeile anzeigt, wie viele Artikel sich im Warenkorb befinden, selbst bevor der Benutzer zur Kasse geht. Sitzungen sind eine gute Wahl, da der Warenkorb bei jeder Anfrage gelesen und aktualisiert werden kann, wenn der Benutzer Artikel hinzufügt oder entfernt. Dies ist besonders hilfreich, wenn der Online-Shop so gestaltet ist, dass er leicht bleibt und eine schwere client-seitige Zustandslage vermeidet.
Ein weiterer praktischer Anwendungsfall ist der Formularzustand. Stellen Sie sich ein Lead-Formular, eine Angebotsanfrage oder einen Onboarding-Ablauf vor, bei dem ein Besucher mehrere Schritte über mehrere Anfragen hinweg ausfüllt. Sitzungen können den aktuellen Schritt, die ausgewählten Optionen oder teilweise eingegebene Werte speichern, sodass der Benutzer keinen Fortschritt verliert, wenn er in einer serverseitig gerenderten App durch den Ablauf navigiert. Das ist oft sauberer, als zu versuchen, jedes Feld im Browser zu behalten.
Ein dritter Szenario ist benutzerspezifischer Anforderungszustand. Das kann einen Zeitstempel des letzten Besuchs, eine temporäre Präferenz oder ein kurzlebiges Flag umfassen, das den Besucher über Anfragen hinweg verfolgen sollte. Es ist kein Ersatz für ein vollständiges Kontosystem, aber es ist nützlich, wenn die Anwendung eine gewisse Kontinuität vor oder außerhalb der Authentifizierung benötigt.
Für Händler und Entwickler besteht der Entscheidungspunkt darin, ob der Zustand an die Anfrage gebunden und temporär ist. Wenn die Antwort ja lautet, sind Sitzungen oft eine bessere Wahl als ein Datenbankeintrag oder eine client-seitige Lösung. Wenn der Zustand langfristige Berichterstattung, geräteübergreifende Persistenz oder komplexe Abfragen benötigt, ist eine Sitzung wahrscheinlich die falsche Schicht.
Sie können Sitzungen auch für “sanfte Personalisierung” verwenden, die kein Login erfordert. Zum Beispiel könnte ein Besucher eine bevorzugte Versandregion, eine Sprachvariante oder einen Produktfilter wählen, der die nächste Anfrage überdauern sollte, aber nicht zu einer dauerhaften Kontoeinstellung werden sollte. Diese Art von Präferenz ist oft zu klein für eine Datenbank und zu sensibel oder unangenehm für einen client-seitigen Speicher, was Sitzungen zu einem guten Mittelweg macht.
Ein weniger offensichtlicher Anwendungsfall ist die temporäre Wiederherstellung von Arbeitsabläufen. Wenn ein Benutzer ein Formular einreicht und dann weg navigiert, kann die Sitzung genügend Zustand speichern, um den nächsten Schritt wiederherzustellen, wenn er zurückkommt. Das ist besonders nützlich für Angebotsgeneratoren, Buchungsabläufe und Support-Formulare, bei denen der Benutzer möglicherweise pausieren und fortfahren muss. Der Schlüssel ist, die gespeicherten Daten auf das zu beschränken, was die nächste Anfrage tatsächlich benötigt, nicht auf jedes Feld, das der Benutzer jemals berührt hat.
So implementieren oder anwenden Sie es – praktische Anleitung
Beginnen Sie mit dem Render-Modus. Sitzungen sind für demand-geladene Seiten gedacht, also bestätigen Sie, dass die Route nicht rein statisch ist. Wenn die Seite live Sitzungsdaten benötigt, muss die App so eingerichtet sein, dass Astro die Sitzung während der Anfrage lesen kann. Das ist das erste architektonische Tor, und es ist wichtiger als der Code selbst.
Überprüfen Sie dann Ihren Adapter. Wenn Sie Node, Cloudflare oder Netlify verwenden, ist der Standardtreiber möglicherweise bereits vorhanden. Wenn Sie einen anderen Adapter verwenden, planen Sie eine manuelle Treiberkonfiguration. Hier treffen Bereitstellung und Speicherstrategie aufeinander, da der Treiber mit der Runtime übereinstimmen muss, die tatsächlich die Anfrage bedient.
Entscheiden Sie dann, was in die Sitzung gehört. Halten Sie die Nutzlast klein und zielgerichtet: Artikel im Warenkorb, einen aktuellen Schritt, eine temporäre Präferenz oder einen Benutzerverweis. Vermeiden Sie es, Daten zu speichern, die später als Geschäftsdaten abgefragt werden sollten. Eine gute Regel lautet: Wenn der Wert nur während der aktuellen Interaktion oder des Sitzungsfensters von Bedeutung ist, könnte er hierher gehören.
Im Code verwenden Sie den Zugriffspunkt, der zur Schicht passt, in der Sie sich befinden. Seiten und Komponenten lesen von Astro.session, während Endpunkte, Middleware und Aktionen context.session verwenden. Für die meisten Arbeitsabläufe sind get() und set() ausreichend. Verwenden Sie regenerate(), wenn Sie eine neue Sitzungsidentität benötigen, und destroy(), wenn der Zustand gelöscht werden soll.
Wenn Sie einen Online-Shop erstellen, ist ein praktisches Muster, den Warenkorb in der Kopfzeile zu lesen und ihn in einem Endpunkt oder einer Aktion zu aktualisieren. Wenn Sie ein mehrstufiges Formular erstellen, lesen Sie den aktuellen Schritt auf der Seite und aktualisieren Sie ihn nach jeder Einreichung. Die Implementierung bleibt einfach, da die Sitzung die gemeinsame Quelle der Wahrheit für diesen kurzlebigen Zustand ist.
Eine gute Implementierungssequenz ist: Bestimmen Sie den Zweck der Sitzung, wählen Sie den Speichertreiber, identifizieren Sie die Seiten und Endpunkte, die Zugriff benötigen, und entscheiden Sie dann, welche Ereignisse Daten schreiben oder löschen sollten. Diese Reihenfolge verhindert, dass die Funktion zu einer unbeabsichtigten Zustandsverwaltung wird. Sie erleichtert auch das Testen, da Sie jeden Schritt unabhängig überprüfen können: Erstellung, Lesen, Aktualisieren und Bereinigung.
Wenn Sie entscheiden, ob Sie einen Wert speichern möchten, stellen Sie drei Fragen: Muss er die nächste Anfrage überdauern, muss der Browser ihn sehen, und gehört er in einen dauerhaften Datensatz? Wenn die Antwort “ja, nein, nein” lautet, sind Sitzungen ein starker Kandidat. Wenn die Antwort “nein, ja oder ja” lautet, verwenden Sie eine andere Schicht. Dieser Entscheidungsfilter verhindert, dass Sitzungen zu einem Auffangbecken für Anwendungszustände werden.
Häufige Fehler und Fallstricke
Der häufigste Fehler besteht darin, zu versuchen, Sitzungen auf einer statischen Seite zu verwenden und zu erwarten, dass sie sich wie client-seitiger Speicher verhalten. Wenn es keine serverseitige Ausführung zur Anforderungszeit gibt, kann die Sitzung nicht auf die Weise gelesen werden, für die die Funktion konzipiert ist. Bestätigen Sie vor dem Schreiben von Code, dass die Route tatsächlich in der Lage ist, auf serverseitige Sitzungen zuzugreifen.
Ein weiterer Fallstrick besteht darin, Sitzungen als Ersatz für eine Datenbank zu verwenden. Sitzungen sind großartig für temporären, an die Anfrage gebundenen Zustand, aber sie sind nicht der richtige Ort für dauerhafte Datensätze, Analysen oder alles, was über Benutzer und Zeit hinweg abgefragt werden muss. Wenn Sie sich in der Situation befinden, dass Sie Historie, Berichterstattung oder relationale Abfragen wünschen, verschieben Sie diese Daten woanders hin.
Teams stoßen auch auf Probleme, indem sie zu viel oder zu locker speichern. Da Sitzungen reichhaltigere Daten als Cookies halten können, ist es verlockend, sie wie ein Auffangbecken zu behandeln. Das erschwert das Debugging und erhöht die Wahrscheinlichkeit, dass der Zustand veraltet. Eine Sitzung sollte so eng gefasst sein, dass Sie ihren Zweck in einem Satz erklären können.
Ein viertes Problem besteht darin, das Verhalten des Adapters zu ignorieren. Einige Umgebungen konfigurieren einen Treiber automatisch, während andere eine manuelle Einrichtung benötigen. Wenn Sie den Treiber nicht frühzeitig überprüfen, können Sie Code erhalten, der lokal funktioniert, aber in der Bereitstellung fehlschlägt. Sitzungsfunktionen sind nur so zuverlässig wie die Speicher-Backend, die hinter ihnen stehen.
Ein weiterer subtiler Fehler besteht darin, die Lebenszyklusbereinigung zu vergessen. Wenn eine Sitzung einen Warenkorb, einen Entwurf oder eine temporäre Präferenz speichert, müssen Sie entscheiden, wann dieser Zustand entfernt oder ersetzt werden soll. Andernfalls können alte Werte in einen neuen Ablauf eindringen und eine verwirrende Benutzeroberfläche schaffen. Die Regenerierung oder Zerstörung der Sitzung zum richtigen Zeitpunkt ist oft der Unterschied zwischen einer ordentlichen Implementierung und einem hartnäckigen Fehler.
Ein verwandter Fehler besteht darin, nicht verwandte Anliegen im selben Sitzungsobjekt zu mischen. Zum Beispiel sollten ein Warenkorb, ein Entwurf eines Formulars und ein Personalisierungs-Flag nicht alle unter einem vagen Schlüssel geschrieben werden, wenn sie unterschiedliche Lebenszyklen haben. Getrennte Schlüssel oder separate Sitzungszwecke erleichtern es, einen Ablauf zu löschen, ohne einen anderen zu brechen. Das hilft auch, wenn mehrere Teile der App dieselbe Sitzung lesen müssen, ohne sich versehentlich gegenseitig zu überschreiben.
Best Practices und schnelle Checkliste
Die besten Sitzungen sind auf eine gute Weise langweilig: klein, vorhersehbar und leicht zu löschen. Halten Sie das Datenmodell auf einen Benutzerfluss konzentriert und definieren Sie, was passieren soll, wenn dieser Ablauf endet. Wenn die Sitzung dazu dient, einen Warenkorb zu unterstützen, wissen Sie, wann sie zurückgesetzt werden sollte. Wenn sie für ein Formular existiert, wissen Sie, wann die Vollständigung sie zerstören oder ersetzen sollte.
Es hilft auch, Sitzungsdaten wie eine Schnittstelle und nicht als Ablage zu behandeln. Verwenden Sie konsistente Schlüssel, halten Sie die Werte strukturiert und vermeiden Sie es, nicht verwandte Anliegen im selben Sitzungsobjekt zu mischen. Das erleichtert es Seiten, Endpunkten und Middleware, ohne sich gegenseitig in die Quere zu kommen.
Eine praktische Checkliste:
- Bestätigen Sie, dass die Route demand-geladen ist, nicht rein statisch.
- Überprüfen Sie den Adapter und den Speichertreiber, bevor Sie Anwendungslogik schreiben.
- Speichern Sie nur temporären, an die Anfrage gebundenen Zustand.
- Verwenden Sie
Astro.sessionin Seiten undcontext.sessionin Endpunkten, Middleware und Aktionen. - Bevorzugen Sie
get()undset()für die meisten Arbeitsabläufe. - Regenerieren oder zerstören Sie die Sitzung, wenn sich das Vertrauen oder der Lebenszyklus ändern.
- Halten Sie Datentypen serialisierbar und das Schema eng.
- Testen Sie den gesamten Anfragezyklus: erster Besuch, Aktualisierung, Auffrischung und Bereinigung.
- Dokumentieren Sie, welches Team die Sitzungsschlüssel besitzt, damit der gleiche Zustand nicht von nicht verwandten Funktionen wiederverwendet wird.
- Überprüfen Sie den Inhalt der Sitzung regelmäßig und entfernen Sie Schlüssel, die nicht mehr benötigt werden.
- Behandeln Sie Sitzungswrites als explizite Ereignisse, nicht als Nebeneffekte des Renderns.
Wenn Sie eine umfassendere Architekturreferenz benötigen, wie Astro das Verhalten zur Anforderungszeit behandelt, ist der Leitfaden zur Inselarchitektur eine nützliche Ergänzung. Sitzungen ersetzen nicht dieses Modell; sie stehen daneben als Zustandsmechanismus für serverseitig gerenderte Anfragen.
Aus der Praxis – illustratives Szenario (hypothetisch, kein Kundenprojekt)
Illustratives Beispiel – kein reales Kundenprojekt: Stellen Sie sich einen Händler vor, der eine kleine Katalogseite mit einem leichten Checkout-Ablauf betreibt. Das Team möchte, dass die Kopfzeile eine Warenkorbanzeige zeigt, die Produktseite Artikel hinzufügt, ohne eine vollständige Frontend-App zu benötigen, und ein kurzes Angebotsformular den Fortschritt des Benutzers merkt, wenn sie zwischen den Schritten wechseln.
Eine typische Einrichtung würde mit demand-geladenen Seiten beginnen, sodass der Server den Sitzungszustand bei jeder Anfrage lesen kann. Die Warenkorbseite könnte die Sitzung lesen und die aktuellen Artikel anzeigen, während ein Endpunkt oder eine Aktion die Sitzung aktualisiert, wenn der Benutzer auf „In den Warenkorb legen“ klickt. Das Angebotsformular könnte den aktuellen Schritt und einige ausgewählte Optionen nach jeder Einreichung speichern und sie bei der nächsten Anfrage wieder abrufen.
Die erste Entscheidung, die das Team trifft, besteht darin, was nicht gespeichert werden soll. Produktbezeichnungen, Preise und Bestandsdetails leben bereits in der Katalogquelle, sodass die Sitzung nur Artikel-IDs, Mengen und den aktuellen Schritt des Formulars benötigt. Das hält die Sitzung klein und vermeidet veraltete Anzeigendaten, wenn sich der Katalog ändert.
Die zweite Entscheidung ist, wo jeder Schreibvorgang stattfinden soll. Die Produktseite sollte den Zustand während des Renderns nicht direkt verändern; stattdessen sollte die Aktion oder der Endpunkt „In den Warenkorb legen“ die Sitzung nach der Validierung aktualisieren. Der Formularfluss kann das gleiche nach jedem erfolgreichen Schritt tun. Diese Trennung macht den Anfragepfad leichter nachvollziehbar und hält Schreibvorgänge an explizite Benutzeraktionen gebunden.
Die dritte Entscheidung betrifft das Lebenszyklus-Management. Wenn der Benutzer zur Kasse gelangt oder das Angebotsformular einreicht, entscheidet das Team, ob nur die Formulartasten gelöscht oder die gesamte Sitzung zerstört werden soll. Wenn der Warenkorb bestehen bleiben soll, ist eine selektive Bereinigung besser. Wenn die gesamte Interaktion abgeschlossen ist und kein temporärer Zustand überdauern soll, ist das Zerstören der Sitzung sauberer.
Das Team benötigt auch einen Plan B für teilweise abgeschlossene Arbeiten. Wenn ein Besucher das Angebotsformular verlässt und später zurückkehrt, sollte die Sitzung entweder den Entwurf wiederherstellen oder sauber ablaufen, abhängig von der Geschäftsregel. Das bedeutet, dass die Implementierung einen Timeout oder eine Bereinigungspolitik definieren sollte, anstatt anzunehmen, dass die Sitzung immer verfügbar ist. Ohne diese Regel können veraltete Entwürfe Benutzer und Supportmitarbeiter gleichermaßen verwirren.
Die Überprüfung des Ablaufs ist ebenso wichtig wie der Aufbau. Das Team sollte einen Erstbesuch, eine Anfrage zum Hinzufügen zum Warenkorb, eine Aktualisierung, ein zweites Gerät oder eine Inkognito-Sitzung sowie ein Bereinigungsevent überprüfen. Diese Überprüfungen bestätigen, dass der Browser nur die Kennung hält, der Server den Zustand hält und die App vorhersehbar reagiert, wenn die Sitzung fehlt oder zurückgesetzt wird.
Die Erkenntnis ist nicht, dass Sitzungen jedes Zustandsproblem lösen. Es ist, dass sie Ihnen einen kontrollierten serverseitigen Ort für temporären Zustand geben, wenn der Browser die Daten nicht besitzen sollte. Für einen Händler bedeutet das oft weniger bewegliche Teile im Frontend. Für einen Entwickler bedeutet es einen klareren Anfragelebenszyklus und weniger Druck, den Zustand nur wegen der Bequemlichkeit in den Client-Code zu pushen.
Verwandte Konzepte und weiterführende Literatur
Wenn Sie entscheiden, ob Sitzungen die richtige Schicht sind, helfen diese verwandten Leitfäden dabei, sie im breiteren Astro-Stack einzuordnen.
- Astro-Inhaltskollektionen: der praktische Weg, um Inhalte strukturiert zu halten – nützlich, wenn Sie strukturierte Inhalte zusammen mit Zuständen zur Anforderungszeit wünschen.
- Verstehen der Astro-Inselarchitektur für bessere Leistung – hilfreicher Kontext, um den client-seitigen Code schlank zu halten, während serverseitiger Zustand verwendet wird.
- Astro-Themes – Durchsuchen Sie Astro-Bauten, bei denen Sitzungen in Shop-, Portfolio- oder appähnlichen Erlebnissen passen könnten.
- Astro-Dokumentation zu Sitzungen – das offizielle Referenzdokument für Konfiguration, Speichertreiber und API-Details.
Thema vertiefen
Weitere Astro-Guides, Glossar-Einträge und Workflows findest du im Themen-Hub.
Häufige Fragen
Wofür werden Astro-Sitzungen verwendet?
Astro-Sitzungen werden verwendet, um Daten auf dem Server zwischen Anfragen für demand-geladene Seiten zu speichern. Häufige Beispiele sind Warenkörbe, Benutzerzustände und Formularfortschritte. Sie sind nützlich, wenn Sie einen gemeinsamen Zustand ohne client-seitiges JavaScript wünschen.
Ersetzen Astro-Sitzungen Cookies?
Nein. Cookies und Sitzungen lösen unterschiedliche Probleme. Cookies sind kleine Datenstücke, die im Browser gespeichert werden, während Astro-Sitzungen die Daten auf dem Server speichern und eine Sitzungskennung im Client verwenden. Das macht Sitzungen besser für größere oder sensiblere Zustände.
Funktionieren Astro-Sitzungen mit statischen Seiten?
Sie sind für demand-geladene Seiten gedacht, nicht für rein statische Ausgaben. Wenn eine Seite vollständig vorgerendert ist, kann sie zur Anforderungszeit keine Live-Sitzungsdaten lesen. Um Sitzungen zu verwenden, benötigt die Route serverseitiges Rendering durch die richtige Astro-Ausgabe und Adapterkonfiguration.
Welche Adapter unterstützen Astro-Sitzungen?
Die Adapter Node, Cloudflare und Netlify konfigurieren automatisch einen Standard-Speichertreiber für Sitzungen. Andere Adapter erfordern möglicherweise, dass Sie einen Treiber manuell angeben. Die genaue Einrichtung hängt von Ihrem Bereitstellungsziel und den Speicheranforderungen ab.
Kann ich große Objekte in Astro-Sitzungen speichern?
Sie können mehr speichern als in Cookies, da die Daten auf dem Server leben. Dennoch sollten Sie die Sitzungsdaten fokussiert und strukturiert halten, nicht als Ablage für alles über einen Benutzer. Speichern Sie nur das, was der Anfragefluss benötigt.
Wie greife ich auf Sitzungsdaten in Astro zu?
In Astro-Komponenten und -Seiten verwenden Sie `Astro.session`. In API-Endpunkten, Middleware und Aktionen verwenden Sie `context.session`. In den meisten Fällen sind die Kernmethoden, die Sie benötigen, `get()`, `set()`, `regenerate()` und `destroy()`.