Das Sitzungsmanagement ist ein sehr wichtiger Bestandteil des Erstellens von Webanwendungen mit PHP. Vor allem, wenn es um die Verwendung der beiden Funktionen Session_register_Shutdown () und Session_Start () geht, verwirren viele Entwickler ihre Anrufbefehl häufig, was dazu führt, dass die Sitzungsdaten nicht ordnungsgemäß gespeichert sind oder andere unvorhersehbare Verhaltensweisen. In diesem Artikel wird die Rolle dieser beiden Funktionen, das Anrufzeitpunkt und die ordnungsgemäße Organisation des Codes eingehend untersucht, um den stabilen Betrieb der Sitzungsfunktion zu gewährleisten.
Session_Start () ist eine Funktion, die zum Starten einer Sitzung verwendet wird. Es wird die Sitzungsdatei gelesen, die bereits auf dem Server vorhanden ist, und lädt die Daten in das Hyperglobal -Array $ _Session Hyperglobal. Wenn es keine entsprechende Sitzungsdatei gibt, wird eine neue Sitzungs -ID erstellt und eine leere Sitzung initialisiert.
Beispiel:
session_start();
$_SESSION['user'] = 'Alice';
Session_register_Shutdown () ist eine von PHP bereitgestellte Funktion zum Registrieren eines Sitzungs-Abschreibungshakens, der sicherstellt, dass die Sitzungsdaten automatisch gespeichert werden, bevor das Skript endet. Dies ist nützlich für Szenarien, in denen Sitzungsdaten in letzter Minute des Skriptlebenszyklus geschrieben werden müssen.
Diese Funktion erfordert normalerweise keinen manuellen Anruf, da Session_start () ihn automatisch registriert. Es ist jedoch besonders wichtig, es manuell zu verstehen und manuell zu nennen, wenn Sie einen benutzerdefinierten Sitzungsprozessor verwenden oder die Sitzungslebenszyklus in einigen speziellen Frameworks benutzerdefiniert haben.
Die wichtigste Regel ist: Session_Start () muss aufgerufen werden, bevor alle Lese- oder Schreibvorgänge in Sitzungsdaten aufgerufen werden, und sollte vor Session_register_Shutdown () registriert werden (wenn Sie sich manuell registrieren) .
Fehlerbeispiel (die Sitzungsdaten werden nicht korrekt gespeichert):
session_register_shutdown();
session_start(); // ? Falsche Anrufbeschaffung
Richtiges Beispiel:
session_start();
session_register_shutdown(); // ? Richtige Anrufreihenfolge(Wenn Sie sich manuell registrieren müssen)
In den meisten Szenarien rufen Sie einfach Session_Start () auf, da PHP den Registrierungs -Shutdown -Hook automatisch verarbeitet. In komplexen Skripten zum Beispiel haben Sie jedoch einen benutzerdefinierten Sitzungsmechanismus:
session_set_save_handler(
[$handler, 'open'],
[$handler, 'close'],
[$handler, 'read'],
[$handler, 'write'],
[$handler, 'destroy'],
[$handler, 'gc']
);
session_start();
session_register_shutdown(); // Explizite Anruf,stellen Sie sicher session Schreiben Sie am Ende des Skripts
Session_Start () muss vor einer Ausgabe (z. B. Echo oder HTML) aufgerufen werden. Andernfalls wird ein Fehler von "Sendungs -Cookie nicht gesendet - bereits gesendete Headers". Stellen Sie sicher, dass vor ihm keine Ausgabe von Inhalten oder Speicherplatz vorhanden ist.
Wenn das Cookie deaktiviert ist, findet PHP den PHPSSID -Parameter an die URL an. Obwohl es nicht empfohlen, wird es in einigen Fällen immer noch von jemandem verwendet, beispielsweise:
$url = "https://m66.net/dashboard.php?" . SID;
echo "<a href=\"$url\">Bedienfeld</a>";
Wobei SID eine von PHP bereitgestellte Konstante ist, mit der automatisch die Sitzungs -ID in der URL angehängt wird. Beachten Sie, dass der SID eine leere Zeichenfolge ist, wenn das Cookie aktiviert ist.
Rufen Sie immer Session_start () vor dem Skript an.
Wenn Sie einen benutzerdefinierten Sitzungsmechanismus verwenden, können Sie Session_register_Shutdown () explizit anrufen, aber die Bestellung sollte nach session_start () erfolgen.
Vermeiden Sie es, Inhalte vor seision_start () auszugeben.
Die Verwendung von URLs zum Übergeben von Sitzungs -IDs hat Sicherheitsrisiken. Versuchen Sie daher, Cookies zu verwenden.
Das korrekte Sitzungsmanagement hilft nicht nur bei der Verbesserung der Programmstabilität, sondern verbessert auch die Sicherheits- und Benutzererfahrung. Ich hoffe, dieser Artikel kann Ihnen helfen, besser zu verstehen, wie diese beiden Funktionen verwendet werden.