In der modernen PHP -Entwicklung bietet Laravel einen leistungsstarken Sitzungsmanagementmechanismus und verwendet standardmäßig Middleware- und Konfigurationstreiber, um das Sitzungsverhalten von nativem PHP zu verkörpern. In einigen erweiterten Szenarien müssen Entwickler jedoch möglicherweise die nativen Funktionen von PHP direkt aufrufen, wie z. In diesem Artikel wird erläutert, wie diese Funktion in Laravel integriert und ihre Nutzungsszenarien und Überlegungen untersucht werden.
Session_register_Shutdown () ist eine Funktion in PHP, die eine Funktion registriert, die am Ende der Skriptausführung automatisch aufgerufen wird. Es wird normalerweise verwendet, um sicherzustellen, dass Sitzungsdaten ordnungsgemäß gespeichert werden, wenn das Skript geschlossen ist. Diese Funktion eignet sich besonders für Reinigungs- oder Datenpersistenzvorgänge in einem benutzerdefinierten Sitzungsprozessor.
Laravel verwendet die SessionManager -Klasse, um alle Sitzungslogik einheitlich zu verwalten. Die zugrunde liegende Ebene wählt den Sitzungstreiber über die Konfigurationsdateikonfiguration/Session.php aus, wie z. B. Datei, Datenbank, Redis usw. Laravel enthält standardmäßig die native Sitzungs -Lebenszyklus -Methode nicht direkt aus, kann jedoch über eine benutzerdefinierte SessionHandlerinterface -Implementierung auf die zugrunde liegende Logik zugreifen.
Erstellen Sie eine neue Prozessorklasse und erben Sie die SessionHandlerInterface -Schnittstelle:
namespace App\Extensions;
use SessionHandlerInterface;
class NativeSessionHandler implements SessionHandlerInterface
{
public function open($savePath, $sessionName)
{
return true;
}
public function close()
{
return true;
}
public function read($id)
{
// Lesen session Daten
return '';
}
public function write($id, $data)
{
// Schreiben session Daten
file_put_contents('/tmp/sessions/' . $id, $data);
return true;
}
public function destroy($id)
{
@unlink('/tmp/sessions/' . $id);
return true;
}
public function gc($maxLifetime)
{
// Müllsammlung durchführen
return true;
}
}
Sie können einen Prozessor registrieren und native Funktionen in Laravels Serviceanbieter verwenden:
// App\Providers\AppServiceProvider.php
use App\Extensions\NativeSessionHandler;
public function boot()
{
$handler = new NativeSessionHandler();
session_set_save_handler($handler, true);
// Sitzungsverarbeitung bei der Schließung der Registrierung
session_register_shutdown();
// Manueller Start session(Wenn nicht verwendet Laravel Middleware)
if (session_status() === PHP_SESSION_NONE) {
session_start();
}
}
Wenn Sie möchten, dass alle Anfragen von Laravel diesen benutzerdefinierten Sitzungsprozessor durchlaufen, können Sie die Standard -Middleware deaktivieren und die Konfiguration ersetzen. Andernfalls können nur bestimmte Anforderungen diese Logik verwenden.
Steuerungssitzungsverhalten in einer CLI -Umgebung oder einem asynchronen Skript
Vermeiden Sie den Sitzungsdatenverlust durch gepufferte Ausgabe und andere Probleme während des Abschaltens von Laravel
Speichern Sie Sitzungsdaten in einem benutzerdefinierten Ort oder externen Dienst des Systems, wie z. B. http://m66.net/session-api interface
public function write($id, $data)
{
$url = 'http://m66.net/session-api/store';
file_get_contents($url . '?id=' . urlencode($id) . '&data=' . urlencode($data));
return true;
}
Der Code mit Session_register_Shutdown () muss früher im Anforderungslebenszyklus ausgeführt werden, um zu vermeiden, dass der Middleware- oder Antwort -Caching -Mechanismus von Laravel gestört wird.
Wenn Sie die Sitzung von Laravel (z. B. Web Middleware -Gruppen) verwenden, müssen Sie Konflikte mit der Logik der nativen Sitzungssteuerung vermeiden.
Es wird empfohlen, Protokolle und Ausnahmebehandlung aller benutzerdefinierten Prozessoren in das Protokollierungssystem von Laravel einzubeziehen, um die Verfolgung von Problemen zu erleichtern.
Obwohl Laravel einen fortschrittlichen Sitzungskapselungsmechanismus bietet, kann die Kombination von PHP-nativem Session_register_Shutdown () granuläre Kontrollfunktionen liefern. Mit einem benutzerdefinierten Sitzungshandler können Sie die Flexibilität von Laravel mit den zugrunde liegenden Leistungsstimmanforderungen kombinieren, um komplexe Systeme für stabilere Sitzungen zu unterstützen.