Heim > Artikel > Backend-Entwicklung > Was tun, wenn die PHP-Sitzung nicht funktioniert?
Lösung für PHP-Sitzung funktioniert nicht: Rufen Sie zuerst die Funktion „session_save_path()“ am Anfang der Seite auf und verweisen Sie dann auf das Verzeichnis, in dem die Sitzung gespeichert ist.
Empfohlen: „PHP-Video-Tutorial“
Der Grund für den PHP-Sitzungsfehler
Kürzlich ist im Projekt des Unternehmens ein Sitzungsfehlerproblem aufgetreten ein paar Minuten. Später habe ich es lange online gelesen und seinen Mechanismus verstanden: Die Sitzung wird in einem öffentlichen Pfad in Lunix gespeichert, was zu Problemen führt. Wenn das Programm viele Sitzungsanwendungen enthält, wirken sie sich gegenseitig aus.
Später habe ich versucht, session.gc_maxlifetime zu ändern, aber ich habe festgestellt, dass dieser Parameter grundsätzlich nicht funktioniert. Standardmäßig werden Sitzungsinformationen in PHP in Form von Textdateien im temporären Dateiverzeichnis des Systems gespeichert. Dieser Pfad wird durch den Konfigurationsparameter session.save_path angegeben. Unter Linux ist dieser Pfad normalerweise tmp und unter Windows normalerweise C:WindowsTemp. Wenn mehrere PHP-Anwendungen auf dem Server vorhanden sind, speichern diese ihre Sitzungsdateien im selben Verzeichnis (da sie denselben session.save_path-Parameter verwenden). Ebenso starten diese PHP-Anwendungen mit einer bestimmten Wahrscheinlichkeit auch GC und scannen alle Sitzungsdateien.
Das Problem besteht darin, dass GC bei laufendem Betrieb nicht zwischen Sitzungen auf verschiedenen Websites unterscheidet. Beispielsweise ist gc_maxlifetime für Standort A auf 2 Stunden und gc_maxlifetime für Standort B auf den Standardwert von 24 Minuten festgelegt. Wenn der GC von Site B startet, scannt er das öffentliche temporäre Dateiverzeichnis und löscht alle Sitzungsdateien, die älter als 24 Minuten sind, unabhängig davon, ob sie von Site A oder B stammen. Auf diese Weise ist die gc_maxlifetime-Einstellung von Site A nutzlos.
Der spezifische Vorgang besteht also darin, dass jedes Projekt seinen eigenen Sitzungspfad hat. Es ist sehr einfach, das Problem zu finden und zu lösen. Rufen Sie die Funktion session_save_path() am Anfang der Seite auf, die den Parameter session.save_path ändern und das Verzeichnis, in dem die Sitzung gespeichert wird, auf ein dediziertes Verzeichnis verweisen kann, z. B. tmpmyapp. Auf diese Weise funktioniert der Parameter gc_maxlifetime normal.
Spezifischer Code:
session_start(); ini_set('session.save_path','/tmp/'); //6个钟头 ini_set('session.gc_maxlifetime',21600); //保存一天 $lifeTime = 24 * 3600; setcookie(session_name(), session_id(), time() + $lifeTime, "/");
Das obige ist der detaillierte Inhalt vonWas tun, wenn die PHP-Sitzung nicht funktioniert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!