クロスドメインAJAXリクエストに問題があります。
この問題には3台のサーバーが関係しています。それらをA1、A2、およびBと呼ぶことができます。
A1とA2は同じアプリケーションコードを実行しています。これらは、同じWebアプリケーションの2つのステージングインスタンスです。Bは別のWebアプリケーションです。
AWebアプリケーションからBアプリケーションへのクロスドメインAJAXリクエストを実行する必要があります。CORSを有効にすることを試みましたが、IE <= 8で十分に機能させるのに苦労したため、現在はnginxプロキシルールを使用しています。したがって、フローは次のようになります。ブラウザのajaxリクエスト-> A1またはA2- >nginxプロキシ-> B
Bはステートフルであり、機能するにはユーザーのセッションCookieが必要です。
私たちが見ているのは、これはサーバーA1を使用している場合は正しく機能しますが、サーバーA2を使用している場合、BはCookieを引き出すことができないということです。
A1とA2からのリクエストのヘッダーを確認しましたが、同じです。どちらもヘッダーにCookie行があり、どちらも同じオリジンを持っています。
Bで表示されるのは、リクエストがA2からのものである場合、$ _ COOKIE ['session_key']は空ですが、リクエストがA1からのものである場合は適切に入力されていることです。
奇妙なことに、ヘッダー内のCookieから特定のCookieキーを1つ引き出すだけで、リクエストがA2から送信された場合にのみ欠落します。A2からのヘッダー内の他のすべてのCookieを正常に解析します。何らかの理由でユーザーのセッションCookieを解析できませんが、要求がA1からのものである場合は正常に解析できます。
私はtcpdumpを使用し、これらのそれぞれのpcapを取得してそれらを比較しましたが、ヘッダーの何も特に異なって見えません。
私はこのスタックオーバーフローの質問を見つけました、そして人々はそれが彼のクッキーヘッダー文字列が長すぎたためだと言いました:それが$_SERVERにあるときにクッキーが$_COOKIEに設定されない原因は何ですか?長い間、成功した場合と失敗した場合の両方で。
$ _SERVERからCookieをリッピングして手動で解析することを検討しているところですが、それは本当にばかげているように思われるので、根本的な問題を理解したいと思います。