ich einige Zeit damit verbracht mich für eine gute Antwort darauf, wie die php.ini-Server-Einstellungen vornehmen Sitzungen ablaufen. Ich habe eine Menge Informationen gefunden, aber es hat eine Weile gedauert, bis ich herausgefunden habe, warum die Einstellungen so funktionieren, wie sie es tun. Wenn Sie wie ich sind, könnte dies hilfreich für Sie sein:
Sitzungen sind als Cookies (Dateien auf dem Client-PC) oder Server-Seite als Dateien auf dem Server gespeichert. Beide Methoden haben Vor- und Nachteile.
Für die auf dem Server gespeicherten Sitzungen werden drei Variablen verwendet.
session.gc_probability session.gc_divisor session.gc_maxlifetime
(session.gc_probability/session.gc_divisor) erzeugt, um die Wahrscheinlichkeit, dass die Speicherbereinigungsroutine ausgeführt wird. Wenn der Garbage Collector ausgeführt wird, sucht er nach Sitzungsdateien, auf die mindestens für session.gc_maxlifetime nicht zugegriffen worden ist, und löscht sie.
Das ist alles ziemlich gut in Forum-Beiträgen (! Dies eine besonders) erklärt - Aber die folgenden Fragen kommen auf:
1.) Wie die Wahrscheinlichkeit angewandt wird? Wann würfelt der Server?
A: Der Server würfelt jedes Mal, wenn session_start() während einer aktiven Sitzung auf dem Server aufgerufen wird. Dies bedeutet also, Sie den Müll Kollektorlauf für jeden 100-mal etwa einmal sehen sollen, dass session_start() wird aufgerufen, wenn Sie den Standard von session.gc_probability haben = 1 und session.gc_divisor = 100
2.) Was passiert auf Servern mit geringem Volumen?
A: Wenn session_start() aufgerufen wird, aktualisiert FIRST FIRST die Sitzung und stellt Ihnen die -Sitzungswerte zur Verfügung. Dies aktualisiert die Zeit in Ihrer Sitzungsdatei auf dem Server . Dann würfelt es und wenn es gewinnt (1 von 100 Chancen) ruft es den Müllsammler an. Der Garbage Collector überprüft dann alle Sitzungs-ID-Dateien und erkennt, ob Dateien vorhanden sind, die zum Löschen berechtigt sind.
Dies bedeutet, dass wenn Sie die einzige Person auf dem Server sind, wird Ihre Sitzung nie inaktiv und es wird so aussehen, als ob die Änderung der Einstellungen keine Wirkung haben. Angenommen, Sie ändern session.gc_maxlifetime auf 10 und session.gc_probability auf 100. Dies bedeutet, dass eine 100% ige Chance besteht, dass der Garbage Collector ausgeführt wird und alle Sitzungsdateien löscht, auf die in den letzten 10 Sekunden nicht zugegriffen wurde .
Wenn Sie die einzige Person auf dem Server sind, wird Ihre Sitzung nicht gelöscht. Sie benötigen mindestens 1 andere aktive Sitzung läuft für Ihre inaktiv zu werden.
Also im Grunde auf einem niedrigen Volumen-Server oder auf einem niedrigen Volumen Zeit - es könnte viel länger als session.gc_maxlifetime dauern, bis der Garbage Collector tatsächlich läuft und die Sitzungen tatsächlich gelöscht. Und ohne zu wissen, wie das funktioniert, mag es Ihnen völlig zufällig erscheinen.
3.) Warum verwenden sie die Wahrscheinlichkeit?
A: Leistung. Auf einem Server mit höherem Volumen möchten Sie nicht, dass der Garbage Collector bei jeder Anforderung von session_start() ausgeführt wird. Es wird unnötig den Server verlangsamen. Abhängig von Ihrem Server-Volume sollten Sie daher die Anzahl erhöhen oder die Wahrscheinlichkeit verringern, dass der Garbage Collector ausgeführt wird.
Ich hoffe, dass dies die Dinge für Sie zusammenhält. Wenn Sie wie ich sind und Sie versuchten Sitzung.gc_maxlifetime und es schien nicht zu funktionieren (weil Sie es auf einem Entwicklungsserver ausprobiert, um niemanden zu stören), dann hat dieser Beitrag hoffentlich Sie einige Kopf kratzen gerettet.
Viel Glück!
Wie ich auf diese Frage mich nach einigen Recherchen stolperte, kann man eine sehr ausführliche Antwort auf dieses Problem auf haben [diese Stackoverflow Frage] (http://StackOverflow.com/a/1270960/474526), insbesondere, warum weder die Aktualisierung von "session.gc_maxlifetime" noch von "session.cookie_lifetime" zuverlässige Ansätze sind. –