0

あるサブドメインが別のサブドメインと通信できるようにするコードを実装しようとしていone.example.comますtwo.example.com。2 つのサイトは、Cookie を使用するように設定したため、Cookie とセッション データを共有できます.example.com

標準の HTTP 経由でいずれかのサイトにアクセスすると、セッションをダンプして期待されるデータを確認できます。ただし、jQuery を使用して JavaScript を介してこれを行うと$.ajax()、ダンプされたセッション データは空になります。どちらの場合も、PHP を使用してセッション データをダンプします。

次の解決策を試しましたが、まだうまくいきません ( http://forum.kohanaframework.org/discussion/9895/problem-session-expired-with-ajax/p1 )。また、少し新しいバージョンの Kohana (3.3) も使用しています。

また、コントローラーに到達したらすぐにヘッダーを設定しようとしました。

$this->response->headers('Access-Control-Allow-Origin', 'http://one.example.com');
$this->response->headers('Access-Control-Allow-Credentials', 'true');
$this->response->headers('Access-Control-Allow-Methods', 'POST, GET, OPTIONS');

ただし、Chrome インスペクタにはまだ as が表示Access-Control-Allow-Originされ*ます。

4

1 に答える 1

2

問題

私が抱えていた問題は、次のような Apache 構成ファイルの設定によるものでした。

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

特定の問題を解決するために、PHP から送信したヘッダーをオーバーライドしていたため、上記のコードを単純に削除またはコメントアウトしました。

私が実装したソリューションは非常に単純でした。one.example.com次の例では、 (メイン Web サイト) からtwo.example.com(サブサイト) に電話をかけていると仮定します。

コハナ / PHP

私の PHP では、次のヘッダーを設定しました。親コントローラーでこれを行うことを選択しました。必要に応じて、独自の Cors クラスまたはヘルパーを作成できます。基本的に、このコードをプロジェクト全体で何百回も複製したくはありません。

$this->response->headers('Access-Control-Allow-Origin', 'http://one.example.com');
$this->response->headers('Access-Control-Allow-Credentials', 'true');
$this->response->headers('Access-Control-Allow-Methods', 'POST, GET, OPTIONS');

JavaScript / jQuery

私のリクエストでは、プロパティを$.ajax()に設定する必要があります。xhrFields.withCredentialstrue

$.ajax({
    url: 'two.example.com',
    xhrFields: {
        withCredentials: true
    }
});

または、次のようにすべての ajax リクエストに対してグローバルに設定することもできます。

$(document).ajaxSend(function (event, xhr, settings) {
    settings.xhrFields = {
        withCredentials: true
    };
});

詳細については、$.ajaxドキュメントを確認してください: http://api.jquery.com/jQuery.ajax/

参考文献

詳細については、次のリソースを確認してください。

于 2013-08-21T14:19:54.640 に答える