今日の作業は、PHP サイトを新しいサーバーに移行することです。
Windows Server 2008 仮想マシンを作成し、その仮想マシン上で net stop http サービスを停止し (ポート 80 の競合を避けるため)、Apache + PHP をインストールして構成し、サイトを新しいサーバーに移行すると、サイトが正常に開き、Apache が起動します。 + PHP は正常に実行され、MySql サーバーへの接続も正常で、すべてが順調でした。30 分で作業を完了するつもりでしたが、その後悪夢が始まりました。
このサイトはシングル サインオンを使用しており、ログイン プロセスには Web サービスへの SOAP 呼び出しを含む JavaScript 非同期操作が含まれています。ログイン後、エラー メッセージは表示されずにログイン ページに戻りました。次の可能性が考えられます。
1. アカウントが異常ですか?他のシステムでテストしたところ、アカウントのステータスは正常でした。
2. JavaScript の非同期操作は失敗しましたか? IE 開発者ツールを使用して Javascript の戻り値を追跡します。戻り値は正常です。
3. Web サービスの呼び出しは失敗しましたか? Fiddler を使用して、検証が成功し、ローカル ログインが完了したことを示す Web サービスの戻り値を追跡します。
追跡とデバッグを繰り返した結果、サイトの SESSION が失われたのではないかと疑い始めました。
1. JavaScript の非同期操作で SESSION の設定に失敗しました。同期アクセスと非同期アクセスの SESSION ID が異なるためでしょうか。これは Flash の非同期呼び出しでのみ発生しましたが、JavaScript でも発生しますか?出力同期アクセスと非同期アクセスのSESSION IDの値は同じです。
2. PHP テストページを 2 つ作成し、1 つのページで SESSION を設定しますが、もう 1 つのページではそれを読み取ることができません。 php.ini 関連の設定を確認してください。正常であるようです。 session.save_path = "C:/php/tmp" パスを確認してください。ただし、SESSION 関連のファイルはなく、設定には tmp ディレクトリすら含まれていません。
結末はとんでもないものです。tmp ディレクトリがないと、PHP は SESSION ファイルを書き込むことができず、当然 SESSION は失われます。 tmp ディレクトリがないのはなぜですか? インストール パッケージに含まれていないためです...私の 3 時間。