¿Puede una respuesta AJAX establecer una cookie? Si no, ¿cuál es mi solución alternativa? ¿Debo configurarlo con Javascript o algo similar?
¿Puede una respuesta AJAX establecer una cookie? Si no, ¿cuál es mi solución alternativa? ¿Debo configurarlo con Javascript o algo similar?
Respuestas:
Sí , puede configurar la cookie en la solicitud AJAX en el código del lado del servidor tal como lo haría para una solicitud normal, ya que el servidor no puede diferenciar entre una solicitud normal o una solicitud AJAX.
Las solicitudes AJAX son solo una forma especial de solicitar al servidor, el servidor deberá responder como en cualquier solicitud HTTP. En la respuesta de la solicitud, puede agregar cookies.
If the user agent supports HTTP State Management it should persist, discard and send cookies (as received in the Set-Cookie response header, and sent in the Cookie header) as applicable.
- de w3.org/TR/XMLHttpRequest
De acuerdo con la sección 4.6.3 de especificaciones de w3 para XMLHttpRequest, un agente de usuario debe respetar el encabezado Set-Cookie. Entonces la respuesta es sí, deberías poder hacerlo.
Cotización:
Si el agente de usuario es compatible con HTTP State Management, debe persistir, descartar y enviar cookies (como se reciben en el encabezado de respuesta Set-Cookie y se envían en el encabezado de Cookie) según corresponda.
Para el registro, tenga en cuenta que todo lo anterior es (aún) verdadero solo si la llamada AJAX se realiza en el mismo dominio. Si está buscando configurar cookies en otro dominio usando AJAX, está abriendo una lata de gusanos totalmente diferente . Sin embargo, la lectura de cookies entre dominios sí funciona (o al menos el servidor las sirve; si el UA de su cliente permite que su código acceda a ellas es, nuevamente, un tema diferente; a partir de 2014 lo hacen).
withCredentials=true
el xhr
objeto (2) Establecer Access-Control-Allow-Credentials
tanto en la solicitud de verificación previa de OPTIONS como en la solicitud real (3) Configurar la cookie según sea necesario
También verifique que su servidor no esté configurando cookies seguras en una solicitud que no sea http. Me acabo de enterar de que mi solicitud de AJAX estaba obteniendo una sesión de PHP con el conjunto "seguro". Como no estaba en https, no estaba devolviendo la cookie de sesión y mi sesión se restablecía en cada solicitud de ajax.