私の最初の投稿 - まず最初に、このサイトが素晴らしいことを言わなければなりません - 質問をすることなく何度も助けてくれました. 今まで!
PHP/MySql/JQueryを使用して構築されたWebアプリケーションを実行します-JQuery AJAXを使用してすべてがロード/投稿されます-.load()および.post()このWebアプリケーションを使用するさまざまなクライアントがいくつかあり、すべてフォームのsumdomainsがあります:client1 .example.com、client2.example.com、example.com は広告ページです。
クライアントがほとんどいなかったとき、ファイルを複製しました。たとえば、クライアント 1 に必要なすべてのファイルはフォルダー example/client1/ にあり、クライアント 2 は正確なコピーを example/client2/ に取得し
ます。クライアントの数が増えるにつれて、構造を次のように変更しました。そのクライアントは共通ファイルを共有していました - 今では AJAX 呼び出しはフォルダ /example/client1 から /example に行きます
各クライアントのサブドメインが実際のフォルダーにリダイレクトされていたため、これは正常に機能していました。たとえば、client1.example.com は example.com/client1 にリダイレクトされます。このリダイレクトは、ブラウザーの同一生成元ポリシーが原因で AJAX 呼び出しが失敗しないようにするために必要でした。
これが引き起こす問題は、PHP セッションが排他的ではないため、異なるクライアント間で共通のユーザーが、ログイン後に URL を変更することにより、他のシステムからの情報を見ることができることです。同じドメイン (example.com) にあるように。
これを回避するには、リダイレクトなしでサブドメインを使用することです。この方法では、PHP セッションが排他的になります。
これを行うと、Same Origin ポリシーにより、親フォルダーへのすべての AJAX 呼び出しが失敗します。:(
このクロスドメイン AJAX リクエストの問題を調査し、さまざまな解決策を試しました。
1) iFrame を使用したトンネリング - 親フォルダー内の AJAX オブジェクト - AJAX 呼び出しは成功します - しかし、PHP セッションで同じ問題が発生します - ドメインは client1.example.com ではなく example.com として認識されます
2) document.domain=example.com を設定するトリック - うまくいかないようです - これは古い時代遅れの回避策だと思います
3) PHP ヘッダーの設定 - header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']); まったく機能しません
ajax 呼び出しに別のライブラリを使用したくありません。
現在、私は2つのオプションを考え出しました:
1)クライアントごとにファイルを複製する古い方法を使用します。これは、スペースの無駄であり、ファイルの更新が面倒になるため、やりたくありません。1つだけではなく、多くのファイルを置き換える必要があります。
2) すべての AJAX 呼び出しを受け取り、親フォルダーから要求されたファイルを含める各クライアント ディレクトリで PHP ベース ファイルを使用します。私はこれをテストしましたが、うまく機能しているようです-誰かがより良い解決策を持っていない限り、これは私が使用するオプションですか?
このオプションを詳しく説明するには:
$.post'(http://example.com/file.php'); を呼び出すのではなく、サブドメインhttp://client1.example.com
のページから投稿しているとします。(これは失敗します)
$.post('http://client1.example.com/base.php',{target:'file.php'}) を呼び出します。
次に、base.php から include('../' .$_REQUEST['ターゲット'])
オプション 2 に満足していますが、もっと良い方法があるのではないかと思うだけです。 ※似たような現象に遭遇した方はいますか?*
乾杯!J