In PHP ist Session_register_Shutdown () eine Funktion, mit der eine Rückruffunktion registriert wird, die bei der Schließung der Sitzung ausgeführt wird. Dieser Mechanismus kann den Entwicklern helfen, am Ende des Sitzungskreislaufs einige Reinigungs- oder Dateneinsparungsvorgänge auszuführen.
Seit Version 5.4 wurde Session_register_Shutdown () jedoch veraltet und durch Session_Write_Close () und die automatischen Rückrufmechanismen der Sitzung ersetzt. In einigen Szenarien, insbesondere bei der Verwendung des YAF -Frameworks zur Verwaltung komplexer Geschäftslogik, möchten wir am Ende der Sitzung immer noch benutzerdefinierten Code ausführen.
In diesem Artikel wird detailliert eingesetzt, wie Sie Session_register_Shutdown () -ähnliche Funktionen im YAF -Framework implementieren und demonstrieren, wie die Sitzungsoperationen der Sitzung über einen Beispielcode verwaltet werden.
Die Kernfunktion von Session_register_Shutdown () besteht darin, eine Rückruffunktion auszuführen, wenn PHP das Schreiben von Sitzungen schließt. Einfach ausgedrückt, wenn die Anforderung verarbeitet wird und PHP die Sitzungsdatei automatisch schließt (schreibt Daten, veröffentlicht Sperrungen usw.), wird die von Ihnen registrierte Rückruffunktion aufgerufen.
In modernen PHP -Versionen ist diese Funktion jedoch veraltet und wird empfohlen, Register_Shutdown_Function () oder basierend auf Session_Write_Close () in Kombination mit benutzerdefinierter Logik zu verwenden.
YAF ist ein leichtes und leistungsstarkes PHP-Framework. Es stört standardmäßig nicht den Sitzungsmechanismus von PHP, aber Sie können Sitzungen verwalten, indem Sie den Rahmen -Lebenszyklus -Haken erweitern.
Die empfohlenen Praktiken hier sind:
Call Session_start () zu Beginn der Anfrage starten Sie die Sitzung
Am Ende der Anfrage wird Session_write_close () aufgerufen und die Operation beim Schließen der Sitzung in Verbindung mit register_shutdown_function () registriert.
Hier ist ein Beispiel für die Implementierung des Sitzungsmanagements im YAF -Framework:
<?php
class Bootstrap extends Yaf_Bootstrap_Abstract
{
public function _initSession(Yaf_Dispatcher $dispatcher)
{
// Start-up Session
session_start();
// Rückrufe ausgeführt, die bei der Schließung der Registrierungssitzung ausgeführt werden
register_shutdown_function(function() {
// Hier ist der Code, der ausgeführt wird, wenn die Sitzung geschlossen ist
// Zum Beispiel speichern Sitzungsdaten,Schreiben Sie Protokolle usw.
file_put_contents('/tmp/session_shutdown.log', date('Y-m-d H:i:s') . " Session closed\n", FILE_APPEND);
// Schließung der Sitzung und Release -Sperre schließen
session_write_close();
});
}
}
Im obigen Code:
Session_Start () öffnet die Sitzung zu Beginn der Anfrage
Registrieren Sie eine anonyme Funktion mit Register_Shutdown_Function () und führen Sie sie aus, bevor das Skript ausgeführt wird, und schließt die Sitzung ab.
Protokollierung oder andere Reinigungsvorgänge können im Rückruf durchgeführt werden
Schließlich CALL Session_Write_Close () , um sicherzustellen, dass Sitzungsdaten geschrieben werden und die Sitzungssperrung veröffentlicht wird
Sie können in jedem Controller auf $ _Session zugreifen und manipulieren und sicherstellen, dass der registrierte Rückruf am Ende der Anfrage aufgerufen wird.
<?php
class IndexController extends Yaf_Controller_Abstract
{
public function indexAction()
{
// aufstellen Session Variable
$_SESSION['user'] = 'Zhang San';
echo "Hello, " . $_SESSION['user'];
// Sie müssen es nicht manuell schließen session,Bootstrap Der Rückruf im Prozess wird verarbeitet
return false; // Beenden Sie die Ansichtsrelecting
}
}
Wenn Ihr Code zum Beispiel auf externe URLs zugreift: beispielsweise:
$url = 'https://www.example.com/api/data';
$response = file_get_contents($url);
Nach den Anforderungen müssen Sie den Domänennamen durch m66.net ersetzen und ihn ändern in: