Die heutige Arbeit besteht darin, eine PHP-Site auf einen neuen Server zu migrieren.
Erstellen Sie eine virtuelle Windows Server 2008-Maschine und stoppen Sie den Net-Stop-HTTP-Dienst darauf (um die Konkurrenz um Port 80 zu vermeiden), installieren und konfigurieren Sie Apache PHP, migrieren Sie die Site auf den neuen Server und öffnen Sie die Site Normalerweise lief Apache PHP normal, die Verbindung zum MySql-Server war normal und alles war in Ordnung. Ich dachte daran, die Arbeit in einer halben Stunde abzuschließen, aber dann begann der Albtraum.
Diese Website verwendet Single Sign-On und der Anmeldevorgang umfasst asynchrone JavaScript-Vorgänge, einschließlich SOAP-Aufrufe an Webdienste. Nach der Anmeldung wurde ohne Fehlermeldung direkt zur Anmeldeseite zurückgesprungen. Wir haben die folgenden Möglichkeiten in Betracht gezogen:
1. Auf anderen Systemen getestet, ist der Kontostatus normal.
2. Ist der asynchrone JavaScript-Vorgang fehlgeschlagen? Verwenden Sie die IE-Entwicklertools, um den Javascript-Rückgabewert zu verfolgen. Der Rückgabewert ist normal.
3. Ist der Webdienstaufruf fehlgeschlagen? Verwenden Sie Fiddler, um den Rückgabewert des Webdienstes zu verfolgen und anzuzeigen, dass die Überprüfung erfolgreich war und die lokale Anmeldung abgeschlossen wurde.
Nach wiederholtem Verfolgen und Debuggen begann ich zu vermuten, dass die SITZUNG der Site verloren gegangen ist:
1 Der asynchrone JavaScript-Vorgang zum Festlegen der SITZUNG ist fehlgeschlagen Sind synchroner Zugriff und asynchroner Zugriff unterschiedlich? Dies ist nur bei asynchronen Aufrufen in Flash passiert. Wird es auch bei JavaScript passieren? Der SESSION-ID-Wert des synchronen Ausgabezugriffs und des asynchronen Zugriffs ist derselbe.
2. Erstellen Sie 2 PHP-Testseiten, legen Sie SESSION auf einer Seite fest, können Sie sie aber auf der anderen Seite nicht lesen. Überprüfen Sie die php.ini-bezogenen Einstellungen. Es scheint normal zu sein, dass der Pfad session.save_path = „C:/php/tmp“ überprüft wird, aber es gibt keine SESSION-bezogenen Dateien und die Einstellung umfasst nicht einmal das tmp-Verzeichnis.
Das Ende ist lächerlich. Ohne das tmp-Verzeichnis kann PHP die SESSION-Datei nicht schreiben und natürlich geht die SESSION verloren. Warum gibt es kein tmp-Verzeichnis? Weil es nicht im Installationspaket enthalten ist ... meine 3 Stunden.
Das Obige hat die schmerzhafte Erfahrung des Verlusts von Apache PHP SESSION unter Windows vorgestellt, einschließlich der relevanten Aspekte. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.