Solución:
No puede configurar ni leer cookies en solicitudes CORS a través de JavaScript. Aunque CORS permite solicitudes de origen cruzado, las cookies aún están sujetas a la política del mismo origen del navegador, lo que significa que solo las páginas del mismo origen pueden leer / escribir la cookie. withCredentials
solo significa que las cookies establecidas por el host remoto se envían a ese host remoto. Tendrá que configurar la cookie desde el servidor remoto utilizando el Set-Cookie
encabezamiento.
Tenga en cuenta que esto no resuelve el proceso de uso compartido de cookies, ya que en general es una mala práctica.
Necesita usar JSONP como su tipo:
De la documentación de $ .ajax: solicitudes entre dominios y tipo de datos: las solicitudes “jsonp” no admiten el funcionamiento sincrónico.
$.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);
}
}
);
Ha habido una gran cantidad de cambios recientes en este campo, por lo que pensé que sería útil una nueva respuesta.
Para que el navegador envíe una cookie a otro sitio durante una solicitud, se deben cumplir los siguientes criterios:
- los
Set-Cookie
El encabezado del sitio de destino debe contener elSameSite=None
ySecure
etiquetas. SiSecure
no se usa elSameSite
se ignorará el encabezado. - La solicitud debe hacerse a un
https
punto final, un requisito delSecure
bandera. - los
XHRRequest
debe estar hecho conwithCredentials=true
. Si usa$.ajax()
esto se logra con elxhrFields
parámetro (que requierejQuery=1.5.1+
) - El servidor debe responder con
Access-Control-Allow-Origin
encabezado que coincide con la solicitudOrigin
encabezamiento. (*
no se respetará en este caso)
Mucha gente llega a esta publicación tratando de hacer desarrollo local en un punto final remoto, lo cual es posible si se cumplen los criterios anteriores.