es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Javascript fetch no está enviando la cabecera de Cookie (CORS)

Estoy intentando enviar Cookies a un Script PHP dentro de una solicitud CORS fetch de JavaScript. La solicitud comienza en `https://sub1.example.com` y contiene las siguientes opciones:

let response = await fetch('https://sub2.example.com/target.php', {
    method: "POST",
    headers: headers,
    body: formData,
    mode: 'cors',
    credentials: 'include',
    cache: 'no-store'
});

El Script PHP correspondiente establece los siguientes encabezados:

header('Access-Control-Allow-Origin: https://www.example.com');
header('Access-Control-Allow-Methods: POST, OPTIONS');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Headers: Origin, Content-Type, Accept, Authorization, X-Request-With, Set-Cookie, Cookie, Bearer');

Pero el encabezado de Cookie no se envía en la solicitud. También probé lo siguiente:

let headers = new Headers();
headers.set('Cookie', document.cookie);

Eso tampoco tuvo efecto. ¿Qué estoy haciendo mal aquí exactamente?

Verifiqué la pestaña de Red en las Herramientas de desarrollo. Además, $_COOKIE en el Script PHP está vacío. No hay absolutamente ningún error. También puedo ver que el encabezado de Cookie se envía en cualquier solicitud fetch no CORS.

EDIT: Aquí están las configuraciones de una de las Cookies:

Nombre: PHPSESSID
Ruta: /
Seguridad: true
SameSite: none

No puedo compartir el Dominio porque no es público. Pero el Dominio de la Cookie tiene el mismo valor que el Origen en el encabezado de la Solicitud (excepto el https://).

EDIT 2: Cambié la URL de fetch para aclarar lo que está sucediendo.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución para enviar cookies en una solicitud fetch CORS

    El problema aquí es que la cookie no se está enviando junto con la solicitud fetch CORS. Cuando se realiza una solicitud CORS (solicitud entre orígenes), las cookies no se envían automáticamente a menos que se establezca el indicador de credenciales en “include”. En este caso, como podemos ver en las opciones de fetch proporcionadas, el indicador de credenciales ya está establecido en “include”.

    Sin embargo, hay algunos pasos adicionales que deben tomarse para garantizar que la cookie se envíe correctamente.

    En primer lugar, debemos asegurarnos de que la cookie se configure con los atributos correctos. En este caso, la cookie parece tener los atributos correctos: es segura y tiene un atributo same-site de “none”, que es necesario para las solicitudes entre sitios.

    El segundo paso es establecer el encabezado ‘Access-Control-Allow-Credentials’ en true en el script PHP, lo cual ya se ha hecho en este caso.

    Por último, debemos asegurarnos de que el encabezado ‘Access-Control-Allow-Origin’ esté configurado con el origen correcto. En este caso, se ha configurado en ‘https://www.example.com’, pero la solicitud se está enviando desde ‘https://sub1.example.com’. Por lo tanto, debemos establecer el encabezado ‘Access-Control-Allow-Origin’ para permitir solicitudes desde ‘https://sub1.example.com’.

    Una vez que se hayan realizado estos pasos, la cookie debería enviarse correctamente con la solicitud fetch CORS.

    Nota: Es importante tener cuidado al enviar cookies entre orígenes, ya que puede abrir posibles vulnerabilidades de seguridad. Asegúrese de enviar cookies solo cuando sea necesario y con los atributos correctos.

Comments are closed.