2010-07-27 9 views
216

¿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?

+0

Estoy usando node.js Express. Me di cuenta de que si haces eso, también debes configurar el campo httpOnly como falso en el lado del servidor. –

Respuesta

199

Sí,, puede configurar la cookie en la solicitud AJAX en el código del servidor del mismo modo que 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 de nuevo como en cualquier solicitud HTTP. En la respuesta de la solicitud puede agregar cookies.

+31

Tenga en cuenta que si la cookie será honrada por el agente HTTP es otra historia. –

+6

@Franci: de acuerdo. Pero creo que la pregunta solo tiene sentido para los clientes http que admiten cookies. Por lo tanto, todos los que preguntan solo desean saber si las cookies se pueden escribir en AJAX, lo que significa que su UA admite cookies :) –

+7

'Si el agente de usuario admite HTTP State Management, debe conservar, descartar y enviar cookies (tal como se recibió en el Encabezado de respuesta de cookie, y enviado en el encabezado Cookie) según corresponda. - desde http://www.w3.org/TR/XMLHttpRequest/ – smwikipedia

264

Según el w3 spec section 4.6.3 for XMLHttpRequest, un agente de usuario debe respetar el encabezado Set-Cookie. Entonces la respuesta es sí, tú deberías ser capaz de hacerlo.

Cotización:

Si el agente de usuario soporta HTTP Estado de Gestión, de persistir, descarte y enviar las cookies (como se recibió en la respuesta cabecera Set-Cookie, y enviado en la cabecera de cookies) en su caso .

+35

+1 para la referencia –

+1

¿IE admite el encabezado Set-Cookie en las respuestas, en caso de respuestas XHR? – detj

+0

Como debería en una redirección, y no cumple en algunos navegadores. –

78

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 establecer cookies en otro dominio usando AJAX, está abriendo un can of worms totalmente diferente. Sin embargo, la lectura de cookies entre dominios funciona (o al menos el servidor les sirve, si el UA de su cliente permite que su código acceda a ellos es, nuevamente, un tema diferente, a partir de 2014 lo hacen).

+5

Gracias por poner esto. Eso es lo que estaba buscando cuando me encontré con esto.^__^ – adiktofsugar

+21

Para enviar cookies entre dominios, debe configurar [conCredentials] (https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS?redirectlocale=en-US&redirectslug=HTTP_access_control#Requests_with_credentials) flag – aeosynth

+4

Para el escenario entre dominios, deben ocurrir 3 cosas: - (1) El cliente debe establecer 'withCredentials = true' para el objeto' xhr' (2) Establecer 'Access-Control-Allow-Credentials' tanto en OPTIONS solicitud de verificación previa, así como la solicitud real (3) Configure la cookie según sea necesario – Kunal

5

También compruebe que su servidor no está configurando cookies seguras en una solicitud que no sea http. Acabo de enterarme de que mi solicitud de ajax estaba recibiendo una sesión de php con un conjunto "seguro". Como no estaba en https, no devolvía la cookie de sesión y mi sesión se restablecía en cada solicitud de Ajax.

Cuestiones relacionadas