HTTP ist aus einem bestimmten Grund ein zustandsloses Protokoll. Sitzungen schweißen den Status auf HTTP. Vermeiden Sie als Faustregel die Verwendung des Sitzungsstatus.
UPDATE: Es gibt kein Konzept für eine Sitzung auf HTTP-Ebene. Server stellen dies bereit, indem sie dem Client eine eindeutige ID geben und ihn anweisen, diese bei jeder Anforderung erneut zu senden. Dann verwendet der Server diese ID als Schlüssel für eine große Hashtabelle von Sitzungsobjekten. Immer wenn der Server eine Anfrage erhält, sucht er die Sitzungsinformationen aus seiner Hashtabelle der Sitzungsobjekte basierend auf der ID, die der Client mit der Anfrage gesendet hat. All diese zusätzliche Arbeit ist ein Doppelschlag in Bezug auf die Skalierbarkeit (ein wichtiger Grund, warum HTTP zustandslos ist).
- Whammy One: Es reduziert die Arbeit, die ein einzelner Server leisten kann.
- Whammy Two: Das Skalieren wird schwieriger, da Sie jetzt eine Anfrage nicht einfach an einen alten Server weiterleiten können - sie haben nicht alle dieselbe Sitzung. Sie können alle Anforderungen mit einer bestimmten Sitzungs-ID an denselben Server anheften. Das ist nicht einfach und ein einziger Fehlerpunkt (nicht für das gesamte System, sondern für große Teile Ihrer Benutzer). Sie können den Sitzungsspeicher auch für alle Server im Cluster freigeben, aber jetzt sind Sie komplexer: an das Netzwerk angeschlossener Speicher, ein eigenständiger Sitzungsserver usw.
Vor diesem Hintergrund ist der Einfluss auf die Leistung umso größer, je mehr Informationen Sie in die Sitzung einfügen (wie Vinko betont). Wie Vinko betont, verhält sich die Sitzung schlecht, wenn Ihr Objekt nicht serialisierbar ist. Vermeiden Sie daher als Faustregel, mehr als unbedingt erforderlich in die Sitzung aufzunehmen.
@Vinko Normalerweise können Sie den Serverspeicherstatus umgehen, indem Sie die Daten, die Sie verfolgen, in die zurückgesendete Antwort einbetten und vom Client erneut senden lassen, z. B. indem Sie die Daten in einer versteckten Eingabe senden. Wenn Sie wirklich eine serverseitige Statusverfolgung benötigen, sollte sich diese wahrscheinlich in Ihrem Sicherungsdatenspeicher befinden.
(Vinko fügt hinzu: PHP kann eine Datenbank zum Speichern von Sitzungsinformationen verwenden. Wenn der Client die Daten jedes Mal erneut übermittelt, können potenzielle Skalierbarkeitsprobleme behoben werden. Es wird jedoch eine große Anzahl von Sicherheitsproblemen geöffnet, auf die Sie jetzt achten müssen, da der Client die Kontrolle über alle hat Ihr Staat)