2010-05-13 17 views
31

Tengo un servicio web que invoco desde el script pero que no necesita ninguna información almacenada en las cookies. Cada vez que hago una solicitud al servicio, la cookie se envía junto con ella. Entiendo que, de forma predeterminada, las cookies se envían con solicitud HTTP, pero ¿hay alguna forma de anular ese comportamiento y no enviar la cookie?Evitar que se envíen cookies en la solicitud de AJAX

En pocas palabras, estoy emitiendo mi solicitud como esta:

$.ajax({ 
    type: "POST", 
    cache: false, 
    url: url, 
    data: data, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(response) { successFunc(response); }, 
    error: function(xhr) { errorFunc(xhr); } 
}); 

Respuesta

0

estás en lo correcto al decir que los navegadores enviar el cuadro correspondiente galletas (ruta + dominio + sesión) junto con la petición HTTP. Esto es crítico para que el mecanismo de cookies funcione.

¿No podría simplemente, no leer las cookies?

Además, cuando se establece originalmente la cookie, puede establecer qué directorio (y sus subdirectorios) pueden acceder a la cookie.

Por ejemplo, si configura una cookie para leer en/foo/bar/solo, un archivo ubicado en /whatever/ajaxHandler.php no puede ver esas cookies.

mira esto: http://us.php.net/setcookie

Aunque no estoy seguro de si está usando PHP, podría ser un buen punto de partida para usted.

+5

Ignorar la cookie no resuelve el problema de que consume ancho de banda – Osseta

+1

Foxtrot, me llama la atención lo que quiere decir con "simplemente no leer la cookie". Además, para tocar su ángulo al configurarlos para directorios específicos, ¿es posible establecer una cookie para todo el alcance PERO un cierto directorio? Si es así, eso me daría algo con qué trabajar, creo. Tenga en cuenta que todo esto sucede en el mismo dominio y que debería distinguirse por un camino en ese dominio. No sé que las cookies pueden manejar eso. ¿Alguien sabe si jQuery permite no enviar cookies con una solicitud AJAX? Esa sería la mejor solución para mí. =] – Simon

+1

Uno no siempre tiene la opción de no leer una cookie, por ejemplo, cuando la autorización se maneja mediante cookies en un marco antes de ejecutar el código de vista. –

15

Envíe solicitudes AJAX al subdominio sin cookies en su servidor. De modo que su aplicación es www.midominio.com y las solicitudes ajax se sirven desde api.midominio.com, donde nunca se configura una cookie. También es una gran idea hacer esto con los archivos estáticos como imágenes, etc ...

ver "Usar dominios de cookies libres de componentes" de http://developer.yahoo.com/performance/rules.html

+0

Osseta, muy buena llamada en dominios sin cookies. Hacemos esto actualmente para otros recursos, como casi todos nuestros archivos estáticos. Necesito elaborar un poco más en este servicio web. No es independiente y está contenido en un subdirectorio, por lo que, en aras de esta discusión, decir que estoy invocando métodos en el mismo dominio bajo el que está mi aplicación web, pero en la ruta secundaria "/publicservices/service.asmx". – Simon

+0

No estoy seguro, pero tengo la impresión de que las cookies son una configuración global por (sub) dominio. Entonces están encendidos o apagados y no son configurables por solicitud. – Osseta

+0

Desafortunadamente, creo que tienes razón. ¡Muchas gracias por su visión! – Simon

1

No, siempre se enviará la cookie.

Puede ver cómo se envían las cookies al navegador y usar la marca http en ellas, lo que significa que no se enviarán mediante javascript.

O (que muchos sitios usan), crea un nuevo subdominio en el que nunca enviaste cookies.

6

Otro enfoque sería antes de hacer $ .ajax:
1. obtener las cookies del navegador para su dominio con javascript (guardarlos en una variable global)
2. Suprimir las cookies para su dominio con javascript desde el navegador
3. haga la llamada $ .ajax
4. coloque las cookies (desde la variable global) de nuevo en el navegador.

Si no necesita las cookies de su dominio en absoluto, simplemente elimínelas (saltee 1. y 4.).

+0

Si solo pudiera darte 1000 votos favorables ... –

+0

Casi perfecto ... porque no hay forma de restaurar cuánto iba a vivir la cookie. –

0

El distintivo withCredentials es necesario para realmente enviar cookies con llamadas ajax de origen cruzado.

Ver: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials

el valor false impedirá que se envíen cookies.

Con solicitudes del mismo origen, deberá seguir las otras respuestas mencionadas aquí.

+0

¿Cómo concilias eso con esto? _Configuración conCredentials no tiene ningún efecto en solicitudes del mismo sitio._ Aunque no era obvio en mi pregunta original hace casi siete años, este servicio .NET estaba incrustado en el sitio web (_.asmx_servicio en una carpeta anidada en el sitio) . – Simon

+0

Bastante justo. Dejaré en claro que withCredentials = false impide el envío de cookies solo en solicitudes cruzadas de origen. –

Cuestiones relacionadas