69

同様のことがすでにstackoverflowで議論されているようですが、まったく同じものを見つけることができませんでした。

CORS(Cross-Origin Resource Sharing)でCookieを送信しようとしていますが、うまくいきません。

これは私のコードです。

$.ajax(
    { 
      type: "POST",
      url: "http://example.com/api/getlist.json",
      dataType: 'json',
      xhrFields: {
           withCredentials: true
      },
      crossDomain: true,
      beforeSend: function(xhr) {
            xhr.setRequestHeader("Cookie", "session=xxxyyyzzz");
      },
      success: function(){
           alert('success');
      },
      error: function (xhr) {
             alert(xhr.responseText);
      }
    }
);

リクエスト HEADER にこの Cookie が表示されません。

4

4 に答える 4

74

JavaScriptを介してCORSリクエストのCookieを設定または読み取ることはできません。CORSはクロスオリジンリクエストを許可しますが、Cookieは引き続きブラウザの同一生成元ポリシーの対象となります。つまり、同じオリジンのページのみがCookieの読み取り/書き込みを行うことができます。withCredentialsリモートホストによって設定されたCookieがそのリモートホストに送信されることを意味するだけです。Set-Cookieヘッダーを使用して、リモートサーバーからCookieを設定する必要があります。

于 2013-01-23T04:31:25.347 に答える
23

一般的にこれは悪い習慣であるため、これはCookie共有プロセスを解決しないことに注意してください。

タイプとしてJSONPを使用する必要があります。

$ .ajaxドキュメントから:クロスドメインリクエストとdataType:「jsonp」リクエストは同期操作をサポートしていません。

$.ajax(
    { 
      type: "POST",
      url: "http://example.com/api/getlist.json",
      dataType: 'jsonp',
      xhrFields: {
           withCredentials: true
      },
      crossDomain: true,
      beforeSend: function(xhr) {
            xhr.setRequestHeader("Cookie", "session=xxxyyyzzz");
      },
      success: function(){
           alert('success');
      },
      error: function (xhr) {
             alert(xhr.responseText);
      }
    }
);
于 2013-01-22T15:54:52.780 に答える