Heim  >  Artikel  >  Backend-Entwicklung  >  PHP ändert die Codefreigabe für die Sitzungsüberlebensspeicherungszeit

PHP ändert die Codefreigabe für die Sitzungsüberlebensspeicherungszeit

小云云
小云云Original
2018-02-10 09:37:581511Durchsuche

In diesem Artikel wird Ihnen hauptsächlich der Beispielcode zum Ändern der Überlebenszeit von SESSION in PHP vorgestellt. Der Herausgeber findet ihn recht gut, daher werde ich ihn jetzt mit Ihnen teilen und als Referenz verwenden. Folgen wir dem Herausgeber, um einen Blick darauf zu werfen. Ich hoffe, es kann allen helfen.

So ändern Sie die Lebensdauer von SESSION

Lassen Sie uns die Lebensdauer von Session manuell festlegen:


<?php
session_start(); 
// 保存一天 
$lifeTime = 24 * 3600; 
setcookie(session_name(), session_id(), time() + $lifeTime, "/"); 
?>

Tatsächlich bietet Session auch eine Funktion session_set_cookie_params(); diese Funktion muss aufgerufen werden, bevor die Funktion session_start() aufgerufen wird:


<?php 
// 保存一天 
$lifeTime = 24 * 3600; 
session_set_cookie_params($lifeTime); 
session_start();
$_SESSION["admin"] = true; 
?>

Wenn der Client IE 6.0 verwendet, wird die Funktion session_set_cookie_params(); beim Setzen von Cookies einige Probleme haben, daher rufen wir die Funktion setcookie immer noch manuell auf, um Cookies zu erstellen.

Einstellung der Sitzungsablaufzeit in PHP

Viele Leute im Internet haben die Antwort gegeben: Ändern Sie session.gc_maxlifetime in der PHP-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 (den Wert von gc_maxlifetime) überschreitet, werden sie gelöscht, was bedeutet, dass diese Sitzungen abgelaufen sind.

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 hier bedeutet, 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, es zu speichern: in Cookies und in URLs. 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. (Verwenden Sie auf der Serverseite 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, dann gilt die entsprechende Sitzung als abgelaufen.

Eine Änderung der Variable gc_maxlifetime in der Datei php.ini kann die Ablaufzeit der Sitzung verlängern: (Beispiel: Wir ändern die Ablaufzeit auf 86400 Sekunden)


session.gc_maxlifetime = 86400

Dann starten Sie einfach Ihren Webdienst (normalerweise Apache) neu.

Hinweis: In PHP5 verwendet der Sitzungsablauf einen Recyclingmechanismus. 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


#概率是gc_probability/gc_pisor
session.gc_probability = 1
session.gc_pisor = 100

Hinweis 1: Nehmen Sie an, dass in diesem Fall gc_maxlifetime=120 ist, wenn eine Sitzungsdatei zuletzt vor 120 Sekunden geändert wurde. Dann Die Sitzung ist weiterhin gültig, bis das nächste Recycling (Wahrscheinlichkeit 1/100) erfolgt.

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

Da der Recycling-Mechanismus den „Zeitpunkt der letzten Änderung“ der Datei überprüft, bedeutet dies, dass, wenn eine Sitzung aktiv ist, sich der Inhalt der Sitzung jedoch nicht geändert hat, die entsprechende Sitzungsdatei nicht geändert wurde und das Recycling erfolgt Der Mechanismus berücksichtigt dies. Es handelt sich um eine Sitzung, die schon lange nicht mehr aktiv war und gelöscht wird. Das ist etwas, was wir nicht sehen wollen. Wir können dieses Problem lösen, indem wir den folgenden einfachen Code hinzufügen:


<?php
if(!isset($_SESSION[&#39;last_access&#39;])||(time()-$_SESSION[&#39;last_access&#39;])>60)
 $_SESSION[&#39;last_access&#39;] = time();
?>
Der Code wird versuchen, die Sitzung jede Minute zu ändern 60 Sekunden.

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.


Verwandte Empfehlungen:


PHP erhält MySQL-Datenspeicherzeit.

Erhalten Sie Speicherzeit ohne MySQL-Daten mit PHP.

Detaillierte Erklärung, wie man die Überlebensspeicherzeit von SESSION in PHP ändert

Das obige ist der detaillierte Inhalt vonPHP ändert die Codefreigabe für die Sitzungsüberlebensspeicherungszeit. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn