今日の作業は、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 時間。
以上がこの記事の全内容です。phpを学習する皆さんのお役に立てれば幸いです。