2010-11-22 4 views
8

のページには、anotherdomain.comのURLにJSONP ajaxリクエスト(jQueryの.getJSON()関数を使用)を作成しています。私はanotherdomain.comのリソースは、そのドメインに設定されているすべてのクッキーにサーバー側のアクセス権を持っていると思った(読んだ:仮定)が、それはそうではないようですか?JSONPを使用したクッキーアクセス

特定のCookieにアクセスし、データ操作を行い、Cookie値でキー入力された豊富な情報を返すために、ajax呼び出しが具体的に行われています。元のドメインはCookie値に直接アクセスできないため、私はAjaxリクエストが必要な状態を維持すると考えました。

私が見落としているクッキーに関する重要な情報はどれですか?私は疲れていて、私はそれを見ていないだけです。

ありがとうございました。

UPDATE

私はそれを行うための方法を見つけたが、それは私の目にJSONPのように見えるので、Ajaxのバージョンにはないながら、このように動作しますなぜ私は思ったんだけど。リクエストはブラウザセッションから切断されているため、クッキーにアクセスできませんか?すべてのAjaxリクエストに

<script type="application/x-javascript" src="<?php echo $service_url . '&callback=interests' ?>"></script> 
<script type="text/javascript"> 
    function interests(data) { 
    $(function() { 
     var c_behaviors = data.length; 
     var ids   = []; 

     for(var i = 0; i < c_behaviors; i++) { 
     ids.push(data[i].behavior_id); 
     } 

     $('body').append('<p><label>Returned:</label> ' + ids.join(', ') + '</p>');  
    }); 
    } 
</script> 
+1

これを3倍にした可能性がありますが、cookieがanotherdomain.comによって設定されていることを確認してください。また、期限切れ、パスなど、設定されているクッキーの状態は何ですか。 –

+0

うん。 Ajaxコールの前にターゲットURLに警告してから、新しいタブにターゲットURLをロードすると、私は期待しているものを得ることができます。 Ajaxの呼び出しは、私が思っていた以上にブラウザセッションから切り離されているようです。 –

+0

"json"というタイプの$ .ajax呼び出しを試して、どのような結果が得られたかを見てください。あなたのJSONPアプローチはhttp://stackoverflow.com/questions/1421245/make-getjson-in-jquery-to-pass-cookies-to-external-domainに文書化されており、他の誰かのためにも働いていました –

答えて

9

The same origin policy applies AJAX呼び出しでアクセスされているドメインは、ブラウザ(document.host)にロードされたドメインとは異なりますので、もし、要求されたURL内のドメインに関連付けられているすべてのクッキーはしません送ってください。したがって、JSONPのアプローチは、新しいスクリプトタグをウィンドウに書き出すので動作します。これは、ブラウザーが外部ドメインに対して行うことができるすべてのリソースリクエスト(URL内のドメインに関連付けられたすべてのCookieを渡す)のように動作します。私はまた、単に私のクロームコンソールから$.post("http://atdmt.com")を呼び出すことによってこれを確認しました。一方、ブラウザのstackoverflow.com(ブラウザにクッキーを持っていた唯一のドメインで、回答を書き留めています)で、要求ヘッダー。

別の解決策は、の状態を維持する問題を回避するにはanotherdomain.com持っているだろうanotherdomain.comファーストパーティのCookie(クッキーのドメイン属性を設定しないことにより)設定のときAJAX/jsonのリクエストはanotherdomain.comにjavascriptを介してアクセスし、標準のHTTPパラメータを使用してリクエストをプッシュします。

私は助けてくれました。

1

私は前に同じ問題が発生しました。私が見つけた問題は、同じ発信元ポリシーが満たされていない場合、ほとんどのブラウザでセッションを確立すること(セッションCookieを設定すること)ができないことです。

関連する問題