J'ai un $.ajax
demande sur le même domaine et je veux lire le cookie. Il continue à retourner null
.
$.ajax({
type: 'GET',
url: myUrl,
success: function(output, status, xhr) {
alert(xhr.getResponseHeader("MyCookie"));
},
cache: false
});
Des idées? J'utilise Chrome pour cela.
Vous recherchez un en-tête de réponse de Set-Cookie
:
xhr.getResponseHeader('Set-Cookie');
Cela ne fonctionnera pas avec les cookies HTTPOnly cependant.
Selon les XMLHttpRequest Level 1 et XMLHttpRequest Level 2 , cet en-tête de réponse particulier relève des en-têtes de réponse "interdits" que vous pouvez obtenir à l'aide de getResponseHeader()
, la seule raison pour laquelle cela pourrait fonctionner est donc essentiellement un navigateur "vilain".
Le navigateur ne peut pas donner accès aux cookies tiers, comme ceux reçus de requêtes ajax pour des raisons de sécurité, cependant il s'en charge automatiquement pour vous!
Pour que cela fonctionne, vous devez:
1) identifiez-vous avec la demande ajax à partir de laquelle vous attendez les cookies:
$.ajax("https://example.com/v2/login", {
method: 'POST',
data: {login_id: user, password: password},
crossDomain: true,
success: login_success,
error: login_error
});
2) Connectez-vous avec xhrFields: { withCredentials: true }
dans la ou les prochaines demandes ajax d'utiliser les informations d'identification enregistrées par le navigateur
$.ajax("https://example.com/v2/whatever", {
method: 'GET',
xhrFields: { withCredentials: true },
crossDomain: true,
success: whatever_success,
error: whatever_error
});
Le navigateur prend soin de ces cookies pour vous, même s’ils ne sont pas lisibles à partir du headers
ni du document.cookie
xhr.getResponseHeader('Set-Cookie');
Cela ne fonctionnera pas pour moi.
Je l'utilise
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"));
},
Semblable à yebmouxing je ne pouvais pas le
xhr.getResponseHeader('Set-Cookie');
méthode de travail. Il ne renverrait que null même si j'avais défini HTTPOnly sur false sur mon serveur.
Moi aussi j'ai écrit une simple fonction d'assistance js pour récupérer les cookies du document. Cette fonction est très basique et ne fonctionne que si vous connaissez les informations supplémentaires (durée de vie, domaine, chemin, etc.) à ajouter vous-même:
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 "";
}