$.ajax
同じドメインでリクエストし、Cookieを読みたい。 null
を返し続けます。
$.ajax({
type: 'GET',
url: myUrl,
success: function(output, status, xhr) {
alert(xhr.getResponseHeader("MyCookie"));
},
cache: false
});
何か案は?このためにChromeを使用しています。
_Set-Cookie
_の応答ヘッダーを探しています:
_xhr.getResponseHeader('Set-Cookie');
_
ただし、HTTPOnly Cookieでは機能しません。
XMLHttpRequest Level 1 および XMLHttpRequest Level 2 によれば、この特定の応答ヘッダーは、getResponseHeader()
を使用して取得できる「禁止」応答ヘッダーに該当します。したがって、これが機能する唯一の理由は、基本的に「いたずらな」ブラウザです。
browserは、セキュリティ上の理由でajaxリクエストから受信したようなサードパーティCookieへのアクセスを許可できません、however自動的にそれらを処理します!
これが機能するためには、次のことが必要です。
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)次のajaxリクエストでxhrFields: { withCredentials: true }
で接続し、ブラウザで保存された資格情報を使用します
$.ajax("https://example.com/v2/whatever", {
method: 'GET',
xhrFields: { withCredentials: true },
crossDomain: true,
success: whatever_success,
error: whatever_error
});
これらのCookieは、headers
やdocument.cookie
から読み取れない場合でも、ブラウザが処理します
xhr.getResponseHeader('Set-Cookie');
私にはうまくいきません。
これを使う
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1);
if (c.indexOf(name) != -1) return c.substring(name.length,c.length);
}
return "";
}
success: function(output, status, xhr) {
alert(getCookie("MyCookie"));
},
Yebmouxingと同様に、できませんでした
xhr.getResponseHeader('Set-Cookie');
動作する方法。サーバーでHTTPOnlyをfalseに設定した場合でも、nullのみを返します。
私も単純なjsヘルパー関数を作成して、ドキュメントからCookieを取得しました。この関数は非常に基本的なものであり、自分自身を追加するための追加情報(寿命、ドメイン、パスなど)を知っている場合にのみ機能します。
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 "";
}