2010-02-18 9 views
9

Me pregunto si se utiliza el siguiente código JavaScript es fiable:¿Es! Document.cookie confiable?

if (!document.cookie) { 
    alert('Cookies are disabled.'); 
} 

He probado esto en IE, Firefox y Chrome y parece que cuando desactivado las cookies, el objeto document.cookie deja de estar disponible. ¿Alguien tiene alguna experiencia con este método trabajando/no trabajando?

Muchas Gracias
Stephen

adicional

Soy muy consciente de que este método requiere que Javascript esté habilitado en el cliente. También conozco otras soluciones de servidor/JavaScript. Por favor, la discusión puede permanecer en el tema.

+1

Puede ser poco fiable, pero puede combinar las pruebas 'document.cookie' con' navigator.cookieEnabled'. – initall

+0

No lo sé. La pregunta, tal como está redactada, suena muy confiable. Cuando evalúa document.cookie (o! Document.cooke) ¿devuelve el valor correcto todo el tiempo? Sí. ¿Es un indicador de si el subsistema de cookies está completamente activo o no? Realmente no. – benc

Respuesta

6

La única manera confiable para mí en este escenario (compruebe si las cookies son deshabilitado, no le importan los problemas de JavaScript y necesita una solución del lado del cliente) es usar una función de conjunto para una cookie de prueba , luego una función get para volver a leerla. Si la cookie de prueba no se puede leer, las cookies están desactivadas.

Puede escribir su propia implementación leyendo un gran recurso en quirksmode, use jQuery plugin o out-of-box solution.

1

Intente establecer un valor en el servidor y leerlo en el cliente. Si las cookies están habilitadas, debería poder leer el mismo valor. Si no, están deshabilitados. Tenga en cuenta que el sitio puede tener httpOnly habilitado.

+0

detección del lado del servidor es la manera más confiable – Dapeng

10

En documentos XHTML, no hay ningún document.cookie en absoluto (hasta Firefox 2 o siempre encendido si envía el documento como application/xml). Tenía que aprender dolorosamente, que se puede establecer en document, sin embargo:

document.cookie = "foo"; 

Ésta es JS válidos, y el navegador se encoge de hombros y establece la propiedad cookie de la variable document. Pero la magia especial para transformar esto en un encabezado HTTP no se llama.

En pocas palabras: No, no puede estar seguro de que la ausencia de document.cookie siempre es idéntica a las cookies deshabilitadas, y viceversa.

+0

Obviamente, también depende de que JavaScript esté activado. El usuario podría haber dejado las cookies activadas, pero desactivado JavaScript. –

+2

@Paul: ¿La pregunta implica que JS está activado o no? De lo contrario, el código tampoco es confiable si la computadora del cliente está apagada. – initall

+0

No leí esa implicación de la pregunta. Preguntó si usar el código JavaScript en cuestión era "confiable". La activación de JavaScript es una preocupación secundaria, pero es por eso que agregué este punto como un comentario a lo que pensé que era la mejor respuesta, y coloqué la palabra "Obviamente" al comienzo. (Si la computadora cliente está apagada, no importa si las cookies están habilitadas o no. Si JavaScript está desactivado, presumiblemente todavía lo tiene). –

0
var gotCookie = (navigator.cookieEnabled) ? true : false; 

if(typeof navigator.cookieEnabled == 'undefined' && !gotCookie) { 
    document.cookie = 'test'; 
    gotCookie  = (document.cookie.indexOf('test') != -1) ? true : false; 
    } 

si gotCookie == true, entonces tienes gotCookie :)

nota: cuando no hay conjunto de cookies, document.cookie parece no estar disponible incluso si se habilita cookies en el navegador. es por eso que lo configuramos con document.cookie = 'test', luego lo verificamos en la siguiente línea. por supuesto, suponiendo que js está habilitado.

1

Opera 7.10 no comprenderá document.cookie, por lo que no es confiable. Trate de usar éste en su lugar:

<script type="text/javascript"> 
var cookieEnabled=(navigator.cookieEnabled)? true : false 

//if not IE4+ nor NS6+ 
if (typeof navigator.cookieEnabled=="undefined" && !cookieEnabled){ 
document.cookie="testcookie" 
cookieEnabled=(document.cookie.indexOf("testcookie")!=-1)? true : false 
} 

//if (cookieEnabled) //if cookies are enabled on client's browser 
//do whatever 

</script> 

Es compatible con la mayoría de los navegadores y los que no funcionan con los que ya no se usan. Lo he probado con Internet Explorer 8.0, Firefox 3.6, Google Chrome 4.0, Opera 10.10 tanto en HTML como en XHTML. Mientras usaba la versión HTML con Internet Explorer 8.0, tuve que confirmar la ejecución del script.

Cuestiones relacionadas