48

同じドメインでリクエストが$.ajaxあり、Cookie を読みたいと思っています。それは戻ってきnullます。

$.ajax({
    type: 'GET',
    url: myUrl,
    success: function(output, status, xhr) {
        alert(xhr.getResponseHeader("MyCookie"));
    },
    cache: false
});

何か案は?これにはChromeを使用しています。

4

4 に答える 4

53

ブラウザは、セキュリティ上の理由から、ajax リクエストから受け取ったようなサード パーティの Cookie へのアクセスを許可できませんが、これらの Cookie は自動的に処理されます。

これが機能するには、次のことが必要です。

1) Cookie が返されると予想される ajax リクエストでログインします。

$.ajax("https://example.com/v2/login", {
     method: 'POST',
     data: {login_id: user, password: password},
     crossDomain: true,
     success: login_success,
     error: login_error
  });

2)xhrFields: { withCredentials: true }次の ajax リクエストで接続して、ブラウザーによって保存された資格情報を使用します。

$.ajax("https://example.com/v2/whatever", {
     method: 'GET',
     xhrFields: { withCredentials: true },
     crossDomain: true,
     success: whatever_success,
     error: whatever_error
  });

これらの Cookie は、ブラウザから読み取ることはできませんが、ブラウザーが処理しますheadersdocument.cookie

于 2016-06-21T22:30:10.107 に答える
48

次の応答ヘッダーを探していますSet-Cookie:

xhr.getResponseHeader('Set-Cookie');

ただし、HTTPOnly Cookie では機能しません。

アップデート

XMLHttpRequest Level 1およびXMLHttpRequest Level 2によると、この特定の応答ヘッダーは、 を使用して取得できる「禁止された」応答ヘッダーに分類されるgetResponseHeader()ため、これが機能する唯一の理由は、基本的に「いたずらな」ブラウザーです。

于 2012-10-11T13:21:03.233 に答える
-1

yebmouxing と同様に、私はできませんでした

 xhr.getResponseHeader('Set-Cookie');

動作する方法。サーバーで HTTPOnly を false に設定した場合でも、null しか返されません。

私も、ドキュメントから Cookie を取得するための単純な js ヘルパー関数を作成しました。この関数は非常に基本的なもので、追加情報 (寿命、ドメイン、パスなど) を知っている場合にのみ機能します。

function getCookie(cookieName){
  var cookieArray = document.cookie.split(';');
  for(var i=0; i<cookieArray.length; i++){
    var cookie = cookieArray[i];
    while (cookie.charAt(0)==' '){
      cookie = cookie.substring(1);
    }
    cookieHalves = cookie.split('=');
    if(cookieHalves[0]== cookieName){
      return cookieHalves[1];
    }
  }
  return "";
}
于 2014-11-25T11:15:19.403 に答える