Wenn in PHP keine Variable auf dieses Objekt zeigt, wird das Objekt zu Müll. PHP wird es im Speicher zerstören; dies ist der GC-Müllentsorgungsmechanismus von PHP, um einen Speicherüberlauf zu verhindern.
Die Aufgabe von GC besteht darin, alle Session
-Informationen zu scannen, die letzte geänderte Zeit von session
von der aktuellen Zeit zu subtrahieren und sie mit dem session.gc_maxlifetime
-Parameter zu vergleichen. Wenn die Überlebenszeit gc_maxlifetime
überschreitet. Standardmäßig 24 Minuten), löschen Sie die Sitzung.
Wenn eine gültige Anfrage auftritt, entscheidet PHP basierend auf den Werten der globalen Variablen session.gc_probability
und session.gc_divisor
. Standardmäßig ist
session.gc_probability = 1 session.gc_divisor = 100
Es ist sagte, dass es eine Chance von 1 % gibt, GC zu starten (das heißt, nur eine von 100 Anfragen wird mit einer der 100 Anfragen gestartet).
Wenn Ihr Webserver jedoch über mehrere Sites verfügt, wenn dort Bei mehreren Standorten kann GC bei der Verarbeitung von Sitzungen zu unerwarteten Ergebnissen führen. Der Grund dafür ist: Wenn GC funktioniert, unterscheidet es nicht zwischen Sitzungen an verschiedenen Standorten.
Wie kann dieses Problem gelöst werden?
1. Ändern Sie session.save_path
oder verwenden Sie session_save_path()
, um die session
jeder Site in einem speziellen Verzeichnis zu speichern.
2. Verbessern Sie die Startrate von GC. Wenn die Startrate von GC zunimmt, nimmt die Leistung des Systems entsprechend ab, was nicht empfohlen wird.
3. Bestimmen Sie die Überlebenszeit des aktuellen session
im Code und verwenden Sie session_destroy()
delete;
session.gc_probability = 1 session.gc_divisor = 100 session.gc_maxlifetime = 1440
Diese drei Konfigurationskombinationen bilden den Garbage-Collection-Mechanismus der serverseitigen Sitzung
session.gc_probability
und session.gc_divisor
bilden die Wahrscheinlichkeit der Sitzungsbereinigung Es besteht eine gewisse Wahrscheinlichkeit, dass der Server die GC-Funktion regelmäßig aufruft, um die Sitzung zu bereinigen. Die Wahrscheinlichkeit der Bereinigung beträgt: gc_probability/gc_divisor
Beispiel: 1/100
bedeutet, dass bei jeder neuen Sitzung eine Bereinigung erfolgt ist eine Wahrscheinlichkeit von
1%
, dass das Garbage Collection-Programm gestartet wird, und der Reinigungsstandard ist session.gc_maxlifetime
Definierte Zeit.
session.gc_divisor
und session.gc_probability
definieren zusammen die Wahrscheinlichkeit, mit der der gc(garbage collection 垃圾回收)
-Prozess bei jeder Sitzungsinitialisierung gestartet wird.
Diese Wahrscheinlichkeit wird mit gc_probability/gc_divisor
berechnet. Beispielsweise bedeutet 1/100, dass bei jeder Anfrage eine 1%
Wahrscheinlichkeit besteht, dass der GC-Prozess gestartet wird. session.gc_divisor
Standardmäßig ist 100
.
Zum Beispiel:
session.gc_maxlifetime = 60 session.gc_divisor = 1000 session.gc_probability = 1
bedeutet, dass jedes Mal, wenn tausend Benutzer session_start()
aufrufen, ein Garbage-Collection-Mechanismus zu 100 % ausgeführt wird, um nutzlose Sitzungsdateien auf der Festplatte zu löschen.
Hinweis: Im Allgemeinen wird für einige große Portale empfohlen, den session.gc_divisor
zu erhöhen, um den Overhead zu reduzieren
Als nächstes werde ich anhand eines Beispiels demonstrieren, wie man es für den Aufruf von gc ( Garbage) konfiguriert Inkasso)-Prozess!
Ändern Sie durch Konfigurieren der php.ini-Datei die folgenden Informationen:
session.gc_maxlifetime = 60//当session文件在60s后还没有被访问的话,则该session文件将会被视为“垃圾文件”,并且等待gc(垃圾回收)进程的调用的时候被清理掉 session.gc_probability = 1000
Da die Wahrscheinlichkeit, dass der GC-Prozess aufgerufen wird, durch gc_probability/gc_divisor
berechnet wird, werde ich hier session.gc_probability
ändern 1000
und session.gc_divisor ist standardmäßig auch 1000
. Der gc-Prozess wird jedes Mal aufgerufen, wenn die Funktion session_start() ausgeführt wird.
Öffnen Sie drei Sitzungen und erstellen Sie drei entsprechende session
Dateien. Wenn jede Datei nicht innerhalb von 60 Sekunden aufgerufen wird, wird sie als „Junk-Datei“ betrachtet und gewartet, bis der GC-Prozess sie aufruft „Junk-Dateien“ werden unlink
sein, da ich die Wahrscheinlichkeit, dass gc aufgerufen wird, durch Ändern der php.ini
-Konfigurationsdatei auf 100 % geändert habe. Wenn ich also als Nächstes wieder einen Browser verwende, sollte es beim Aktualisieren der Seite nur noch sein Eine der drei verbleibenden session
-Dateien ist
session.save_handler = files
, die definiert, wie die Sitzung auf der Serverseite gespeichert wird. file
bedeutet das Speichern von sesion
in einer temporären Datei Wenn Sie eine andere Möglichkeit zum Speichern anpassen möchten (z. B. die Verwendung einer Datenbank), müssen Sie dieses Element auf user
setzen.
Verwandte Empfehlungen: „PHP-Tutorial“
Das obige ist der detaillierte Inhalt vonPHP-Sitzungs-Garbage-Collection-Mechanismus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!