Heim  >  Artikel  >  Backend-Entwicklung  >  Was tun, wenn die PHP-Sitzung nicht funktioniert?

Was tun, wenn die PHP-Sitzung nicht funktioniert?

藏色散人
藏色散人Original
2020-09-28 09:04:143351Durchsuche

Lösung für das Problem, dass die PHP-Sitzung nicht funktioniert: Öffnen Sie zunächst die sitzungsbezogenen Konfigurationselemente, erstellen Sie dann eine neue Sitzungsdatei und legen Sie die Datei erneut hoch.

Was tun, wenn die PHP-Sitzung nicht funktioniert?

Empfohlen: „PHP-Video-Tutorial

So beheben Sie Sitzungsfehler in PHP-Projekten

Ich bin heute nach der Arbeit mit dem Shuttlebus gefahren, als ich am Bahnhof ankommen wollte Von meiner vorherigen Firma habe ich einen Fragebogen an „Ich möchte das Feuer löschen“ geschickt. Nachdem ich aus dem Auto gestiegen war, fragte ich ausführlich am Computer. Die Beschreibung des Anführers lautet wie folgt: „Können Sie mir helfen?“ Ich verstehe, warum nach dem Hochladen des Testpapiers und dem Veröffentlichen der Aufgabe die Sitzung vorbei ist.

Da ich das Backend dieses Projekts zu Beginn selbst entwickelt habe, habe ich das Problem schnell gefunden. Der Vorgang ist: Der Benutzer lädt die Testarbeit über die js-Komponente hoch. Bei der Methode zum Hochladen der Testarbeit werden in der Sitzung die detaillierten Informationen der gerade hochgeladenen Testarbeit wie Name, Suffix und ID gespeichert Klicken Sie nach dem erfolgreichen Hochladen auf andere Optionen auf der Seite, z. B. auf Schule, Klasse, Schwierigkeitsgrad usw., und klicken Sie abschließend auf „Senden“. Der gerade hochgeladene Sitzungswert ist vorhanden. Wenn er nicht vorhanden ist, wird zur Startseite der Testarbeit gesprungen. Ich habe $_SESSION in dieser Methode gedruckt, aber es hatte keinen Wert. Es hat vorher gut funktioniert. Also fragte ich, wann es angefangen habe, und der Leiter sagte, dass der Lehrer, als er nachmittags Feierabend machen wollte, anrief und sagte, dass das Hochladen des Testpapiers und das Einrichten des Antwortbogens fehlgeschlagen seien und es immer weiter gesprungen sei. Dann fragte ich noch einmal, ob die Serverumgebung geändert worden sei, und der Leiter sagte nein.

Da es ein Problem gibt, lösen wir es. Zu dieser Zeit habe ich zufällig das Buch „PHP Core Technology and Best Practices“ gelesen, das eine detaillierte Beschreibung von Sitzungen und Cookies enthält und auch mein Verständnis der beiden vertieft hat. Also habe ich zuerst die PHP-Konfigurationsdatei geöffnet, die sitzungsbezogenen Konfigurationselemente gefunden und festgestellt, dass session.save_path /data2/session war. Wie hat sich das geändert? Also habe ich den Pfad verlassen und einen Blick auf den Pfad geworfen. Zuerst dachte ich, dass das Verzeichnis nicht über ausreichende Berechtigungen verfügt, aber später stellte ich fest, dass es überhaupt kein solches Verzeichnis gab. Also habe ich eine neue Datei erstellt, Berechtigungen festgelegt, sie erneut hochgeladen und alles war wieder normal.

Nachdem ich dies geschrieben habe, möchte ich auch über einige technische Punkte im Zusammenhang mit der Sitzung sprechen. Die Sitzung wird auf der Serverseite gespeichert und standardmäßig in Dateien gespeichert (session.save_handler = files). Wie wird also eine Sitzung generiert? Die Sitzung wird über die Funktion session_start() generiert. Wenn diese Funktion ausgeführt wird, werden in dem Verzeichnis, in dem die Sitzung gespeichert ist, eine Datei und eine entsprechende eindeutige Sitzungs-ID generiert. Die Daten der Sitzungsdatei können über die Sitzungs-ID abgerufen werden . Da jedes Mal, wenn session_start() ausgeführt wird, eine neue Sitzungsdatei generiert wird, wie kann die zuvor generierte Sitzungsdatei nur session_id($session_id) verwendet werden, dann wird die Sitzungsdatei nicht neu generiert, sondern die entsprechende Sitzungs-ID Sitzungsdatei gelesen werden. Standardmäßig verwendet die Sitzungs-ID das Cookie auf dem Client (Browser), um die Sitzungs-ID zu speichern (drücken Sie F12 im Chrome-Browser, klicken Sie auf Ressourcen-Cookies, Sie können sehen), verwenden Sie $_COOKIE['PHPSESSID'] Kann abgerufen werden. Diese PHPSESSID ist der Standardname der Sitzungs-ID. Sie kann durch session.name in php.ini festgelegt werden. Verwenden Sie session_name() im Skript, um den Namen der Sitzungs-ID zu erhalten. Jedes Mal, wenn der Browser mit dem Server kommuniziert, übergibt der Browser die Sitzungs-ID an den Server, und der Server findet die entsprechende Sitzungsdatei basierend auf der übergebenen Sitzungs-ID, ruft die entsprechenden Informationen ab und führt entsprechende Vorgänge aus. Sobald der Client (Browser) Cookies deaktiviert, erhält der Server die Sitzungs-ID nicht. Zu diesem Zeitpunkt muss die Sitzungs-ID explizit übergeben werden. Zwei Methoden: Übergeben Sie die Sitzungs-ID manuell über die URL. Übergeben Sie die Sitzungs-ID über das ausgeblendete Formular. Die beiden oben genannten Methoden erfordern, dass der Wert session.use_trans_sid in der PHP-Umgebung des Servers 1 ist.

Nach so viel Ausführlichkeit waren es am Ende Linus‘ Worte: „Reden ist billig, zeig mir den Code.“

<?php
session_start();
$_SESSION[&#39;arr&#39;] = array(&#39;name&#39; => &#39;molaifeng&#39;, &#39;hobby&#39; => &#39;php&#39;);
?>
<a href="testSession.php?<?php echo session_name(); ?>=<?php echo session_id()?>">testSession</a>
<?php
 
session_start($_REQUEST[session_name()]);
print_r($_SESSION);

Du kannst den Code verstehen, deshalb werde ich ihn nicht erklären.

Zusammenfassend lässt sich sagen, dass seitenübergreifende Sitzungsfehler normalerweise aufgrund der oben aufgeführten Punkte auftreten. 1. Der session.save_path ist falsch, z. B. unzureichende Berechtigungen oder das Verzeichnis existiert nicht. 2. Der session.use_trans_sid-Wert in der PHP-Konfiguration des Servers ist 0. Cookies sind auf dem Client deaktiviert. Aber ich denke, die Häufigkeit der ersten Situation sollte ziemlich hoch sein.

【aktualisiert am 21.05.2018】

Als ich am Freitagabend online ging, bin ich in eine weitere Falle geraten. Das Framework verwendet CI und Sitzungsschreibvorgänge in MySQL-Tabellen. Zuerst waren die Symptome genau die gleichen wie oben beschrieben, also habe ich das Verzeichnis der Sitzung zurückgesetzt und die entsprechenden Lese- und Schreibrechte erteilt, aber es passierte nichts. Später stellte ich fest, dass es sich bei der Tabelle um eine Speichertabelle handelte. Ich dachte, sie würde den Maximalwert der Speichertabelle überschreiten, also löschte ich die Tabelle, aber das Problem bestand weiterhin. Nachdem ich schließlich die Unterschiede zwischen den beiden Versionen verglichen hatte, stellte ich fest, dass beim Speichern der Sitzung zwei neue Felder hinzugefügt wurden. Daher habe ich zuerst die Eliminierungsmethode verwendet, um beide mit Anmerkungen zu versehen, sie dann einzeln geöffnet und schließlich das Problem lokalisiert. Es stellt sich heraus, dass ein neuer Wert verwendet wird, um alle Werte einer Typtabelle zu speichern. Zu Beginn waren es nur wenige Werte. Später, als es online ging, waren es mehr als hundert Gleichzeitig war das Feld nur noch 3000 groß. Also habe ich zunächst das Feld vergrößert und online verifizieren lassen und dann die entsprechende Logik so geändert, dass nicht alle Werte in der Tabelle eingeschrieben wurden.

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!

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