servicios - jquery servicio rest
¿Cómo obtener una cookie de una respuesta AJAX? (4)
El navegador no puede dar acceso a cookies de terceros como las recibidas de solicitudes de AJAX por razones de seguridad, ¡ sin embargo , se encarga automáticamente de las mismas!
Para que esto funcione, debes:
1) inicie sesión con la solicitud ajax de la que espera que se devuelvan las cookies:
$.ajax("https://example.com/v2/login", {
method: ''POST'',
data: {login_id: user, password: password},
crossDomain: true,
success: login_success,
error: login_error
});
2) Conéctese con xhrFields: { withCredentials: true }
en las próximas solicitudes de ajax para usar las credenciales guardadas por el navegador
$.ajax("https://example.com/v2/whatever", {
method: ''GET'',
xhrFields: { withCredentials: true },
crossDomain: true,
success: whatever_success,
error: whatever_error
});
El navegador se ocupa de estas cookies aunque no se puedan leer desde los headers
ni desde el document.cookie
Tengo una solicitud $.ajax
en el mismo dominio y quiero leer la cookie. Sigue volviendo null
.
$.ajax({
type: ''GET'',
url: myUrl,
success: function(output, status, xhr) {
alert(xhr.getResponseHeader("MyCookie"));
},
cache: false
});
¿Algunas ideas? Estoy usando Chrome para esto.
Está buscando un encabezado de respuesta de Set-Cookie
:
xhr.getResponseHeader(''Set-Cookie'');
Sin embargo, no funcionará con las cookies de HTTPOnly.
Actualizar
De acuerdo con XMLHttpRequest Nivel 1 y XMLHttpRequest Nivel 2 , este encabezado de respuesta particular cae bajo los encabezados de respuesta "prohibida" que puede obtener usando getResponseHeader()
, por lo que la única razón por la que esto podría funcionar es básicamente un navegador "travieso".
Similar a yebmouxing no pude
xhr.getResponseHeader(''Set-Cookie'');
método para trabajar. Solo devolvería null incluso si hubiera configurado HTTPOnly como falso en mi servidor.
Yo también escribí una función js helper simple para tomar las cookies del documento. Esta función es muy básica y solo funciona si conoce la información adicional (vida útil, dominio, ruta, etc.) para agregarse usted mismo:
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 "";
}
xhr.getResponseHeader(''Set-Cookie'');
No funcionará para mí.
yo uso esto
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"));
},