PHP -Sitzungen lösen die inhärente Staatenlosigkeit des Webs und ermöglichen Sie Funktionen wie Einkaufswagen, Website -Besuchen Sie die Tracking und die Benutzernavigationsüberwachung. Während in den meisten Fällen die Standardbehandlung von PHP ausreicht, bieten benutzerdefinierte Lösungen erweiterte Funktionen und alternative Datenspeicher. In diesem Artikel wird der Standardmechanismus erläutert und zeigt, wie er für angepasste Sitzungsverwaltung überschrieben wird.
Schlüsselkonzepte:
serialize()
, unserialize()
) bleibt die Standarddatenbearbeitungsmethode, unabhängig vom Speicherort. session_set_save_handler()
Ersetzen Sie den Standard -Sitzungshandler. Es benötigt sechs Rückruffunktionen: Sitzungseröffnung, Schließen, Lesen, Schreiben, Zerstörung und Müllsammlung. SessionHandlerInterface
, wobei Methoden für jede Sitzungslebenszyklusstufe bereitgestellt werden. session.gc_probability
und session.gc_divisor
in php.ini
. Standard -Sitzungsspeicher verstehen:
Vor dem Erstellen eines benutzerdefinierten Handlers verstehen Sie das Standardverhalten von PHP. Sitzungsdaten werden in einzelnen Dateien auf dem Server gespeichert, die jeweils mit einer eindeutigen ID verknüpft sind (gespeichert in einem Browser -Cookie- oder URL -Parameter). PHP verwendet diese ID, um Daten zu nachfolgenden Anforderungen abzurufen.
, um das Sitzungsdatenverzeichnis zu finden:
<?php echo session_save_path(); ?>
Sie können diesen Pfad in php.ini
oder session_save_path("/path/to/session/data");
ändern. Das Speichern von Sitzungsdaten außerhalb des Web -Root -Verzeichnisses verbessert die Sicherheit.
Sitzungsdateien (mit dem Namen "Sess_" gefolgt von der Sitzungs -ID - erhältlich über session_id()
) enthalten serialisierte Daten. Zum Beispiel führt das Speichern von $_SESSION["colors"] = array("red", "blue");
zu einer Datei mit:
<code>colors|a:2:{i:0;s:3:"red";i:1;s:4:"blue";}</code>
Diese Serialisierung ist auch bei benutzerdefinierten Handlern konsistent; Sie ändern wobei Daten gespeichert sind, nicht wie es wird behandelt.
Der Sitzungslebenszyklus und session_set_save_handler()
:
session_start()
öffnet die Sitzungsdatei und lädt Daten in $_SESSION
. Daten werden gespeichert, wenn das Skript endet (oder über session_write_close()
). session_set_save_handler()
Ermöglicht das Überschreiben mit benutzerdefinierten Rückrufen für:
Für jede Lebenszyklusstufe ist eine registrierte Rückruffunktion erforderlich. Ansonsten gibt PHP eine Warnung aus. Rückrufe können Funktionen, Schließungen, Objektmethoden oder statische Klassenmethoden sein.
Erstellen eines benutzerdefinierten Handlers (mySQL -Beispiel):
Dieses Beispiel verwendet eine MySQL -Datenbank, um Sitzungsdaten zu speichern. Die Datenbanktabelle sollte Felder für Sitzungs -ID, Daten und letzte Zugriffszeit haben:
<?php echo session_save_path(); ?>
Die folgenden Funktionen zeigen die sechs Rückrufe unter Verwendung von PDO für die Datenbankinteraktion:
<code>colors|a:2:{i:0;s:3:"red";i:1;s:4:"blue";}</code>
Denken Sie daran, die Anmeldeinformationen für Platzhalter -Datenbank durch Ihre eigenen zu ersetzen. Dieses Beispiel bietet einen grundlegenden Rahmen. Fehlerbehandlung und robustere Datenbankinteraktionen sollten für die Produktionsanwendung hinzugefügt werden. Die Datenhandhabung in read
und write
kann an die spezifischen Anforderungen angepasst werden (z. B. keine serialisierenden Daten vor der Speicherung).
Schlussfolgerung:
benutzerdefinierte Sitzungshandler bieten Flexibilität und Kontrolle über das Sitzungsmanagement. Dieser Artikel zeigte eine MySQL-basierte Lösung; Die gleichen Prinzipien gelten für andere Speichermechanismen. Denken Sie daran, die Serialisierung/Deserialisierung korrekt zu behandeln und die ordnungsgemäße Fehlerbehebung und Sicherheitsmaßnahmen zu implementieren.
Das obige ist der detaillierte Inhalt vonSchreiben benutzerdefinierter Sitzungshandler. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!