Heim > Artikel > Backend-Entwicklung > Einfache Erklärung der Sitzungsablaufeinstellung in PHP
Dieser Artikel ist eine detaillierte Analyse und Einführung in die Ablaufeinstellungen von PHP Sitzung. Freunde in Not können sich auf
Viele Leute im Internet beziehen: PHP ändern Sitzung .gc_maxlifetime in der Konfigurationsdatei . Wenn Sie mehr über den Sitzungsrecyclingmechanismus erfahren möchten, lesen Sie weiter. (Die Umgebung dieses Artikels ist PHP5.2)
Übersicht: Jede PHP-Anfrage hat eine Wahrscheinlichkeit von 1/100 (Standardwert), ein „Sitzungsrecycling“ auszulösen. Wenn ein „Sitzungsrecycling“ auftritt, werden die /tmp/sess_*-Dateien überprüft. Wenn die letzte Änderungszeit 1440 Sekunden überschreitet (der Wert von gc_maxlifetime), wird sie löschen, was bedeutet, dass diese Sitzung abläuft .
1. Wie erfolgt die Sitzung auf der Serverseite (normalerweise Apache mit PHP Modul)?
Standardmäßig speichert PHP die Sitzung im Verzeichnis /tmp und der Dateiname lautet wie folgt: sess_01aab840166fd1dc253e3b4a3f0b8381. Jede Datei entspricht einer Sitzung.
mehr /tmp/sess_01aab840166fd1dc253e3b4a3f0b8381
Benutzername|s:9:“jiangfeng“;admin|s:1:“0″;
#Variablenname|Typ:Länge:Wert
Das Löschen der Sitzungsdatei bedeutet hier, dass die entsprechende Sitzung ungültig ist.
2. Wie erfolgt die Sitzung auf der Clientseite (normalerweise im Browser)?
Die Sitzung findet auf der Browserseite statt, Sie müssen nur die Sitzungs-ID (die eindeutige, von der Serverseite generierte ID) speichern. Es gibt zwei Möglichkeiten zum Speichern: im Cookie und in der URL. Wenn die Sitzungs-ID im Cookie gespeichert ist, können Sie erkennen, dass im Cookie des Browsers eine PHPSESID-Variable vorhanden ist. Wenn es per URL übergeben wird, können Sie eine URL in der Form sehen:
index.php?PHPSESID=01aab840166fd1dc253e3b4a3f0b8381. (Auf der Serverseite verwenden Sie session.use_cookies, um zu steuern, welche Methode verwendet wird)
3. Wie stellt PHP auf der Serverseite fest, ob die Sitzungsdatei abgelaufen ist?
Wenn die „letzte Änderungszeit“ auf „jetzt“ gc_maxlifetime (Standard ist 1440) Sekunden überschreitet, gilt diese Sitzungsdatei als abgelaufen, wenn die nächste Sitzung recycelt wird, wenn diese Datei noch vorhanden ist nicht geändert wurde, wird die Sitzungsdatei gelöscht (die Sitzung läuft ab).
Vereinfacht ausgedrückt: Wenn ich mich auf einer Website anmelde und innerhalb von 1440 Sekunden (Standardwert) keine Aktion erfolgt, gilt die entsprechende Sitzung als abgelaufen.
Ändern Sie also die Variable gc_maxlifetime in der Datei php.ini, um die Ablaufzeit der Sitzung zu verlängern: (Beispiel: Wir ändern die Ablaufzeit auf 86400 Sekunden)
session.gc_maxlifetime = 86400
Starten Sie dann neu Ein Webdienst (normalerweise Apache) reicht aus.
Hinweis: PHP5 verwendet einen Recyclingmechanismus, wenn die Sitzung abläuft. Die hier eingestellte Zeit beträgt 86400 Sekunden. Wenn die Sitzung nicht innerhalb von 86400 Sekunden geändert wurde, wird sie erst beim nächsten „Recycling“ gelöscht.
3. Wann findet das „Recycling“ der Sitzung statt?
Standardmäßig besteht für jede PHP-Anfrage eine Recyclingwahrscheinlichkeit von 1/100, sodass dies einfach so verstanden werden kann: „Für alle 100 PHP-Anfragen findet ein Recycling statt.“ Diese Wahrscheinlichkeit wird durch die folgenden Parameter gesteuert
#Die Wahrscheinlichkeit ist gc_probability/gc_pisor
session.gc_probability = 1
session.gc_pisor = 100
Hinweis 1: Angenommen, in diesem Fall ist gc_maxlifetime=120, wenn eine Sitzungsdatei zuletzt vor 120 Sekunden geändert wurde, dann ist die Sitzung noch gültig, bevor die nächste Wiederverwendung erfolgt (Wahrscheinlichkeit 1/100).
Hinweis 2: Wenn Ihre Sitzung session.save_path verwendet, um die Sitzung an anderer Stelle zu speichern, verarbeitet der Sitzungsrecyclingmechanismus möglicherweise nicht automatisch abgelaufene Sitzungsdateien. Zu diesem Zeitpunkt müssen Sie abgelaufene Sitzungen regelmäßig manuell (oder crontab) löschen: cd /path/to/sessions; find -cmin +24 |
4. Einige Sonderfälle
Weil der Recyclingmechanismus die „letzte Änderungszeit“ der Datei überprüft, wenn eine Sitzung aktiv ist, der Sitzungsinhalt jedoch not Wenn es geändert wurde, wurde die entsprechende Sitzungsdatei nicht geändert. Der Recyclingmechanismus geht davon aus, dass es sich um eine Sitzung handelt, die schon lange nicht mehr aktiv war, und löscht sie. Das wollen wir nicht sehen. Wir können dieses Problem lösen, indem wir den folgenden einfachen Code hinzufügen:
60) $_SESSION['last_access'] = time(); ?>
Der Code versucht alle 60 Sekunden, die Sitzung zu ändern.
Zusammenfassung: Wenn Sie die Ablaufzeit der Sitzung ändern möchten, ändern Sie einfach die Variable gc_maxlifetime. Die Sitzung von PHP5 verwendet einen passiven Recyclingmechanismus (Garbage Collection). Abgelaufene Sitzungsdateien verschwinden nicht von selbst, aber abgelaufene Sitzungen werden verarbeitet, indem das „Recycling“ ausgelöst wird.
Das obige ist der detaillierte Inhalt vonEinfache Erklärung der Sitzungsablaufeinstellung in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!