2010-08-03 9 views
42

¿Hay alguna forma de, con ayuda de Javascript, enumerar todas las cookies asociadas con la página actual? Es decir, si no sé los nombres de las cookies pero quiero recuperar toda la información que contienen.¿Cómo puedo hacer una lista de todas las cookies para la página actual con Javascript?

+0

Aclare si por "página determinada" se entiende "la página en la que se encuentra el usuario". La respuesta de DixonD es perfecta para las cookies de la página actual. Todos los demás dominios están fuera de los límites por razones de seguridad. –

+1

Sí. Estoy hablando de la página en la que el usuario se encuentra actualmente. – Speldosa

+1

OK. Edité el título y la pregunta para reflejar eso. La respuesta de DixonD es apropiada aquí. –

Respuesta

54

Se pueden listar las cookies de dominio actual:

function listCookies() { 
    var theCookies = document.cookie.split(';'); 
    var aString = ''; 
    for (var i = 1 ; i <= theCookies.length; i++) { 
     aString += i + ' ' + theCookies[i-1] + "\n"; 
    } 
    return aString; 
} 

pero no se puede enumerar las cookies para otros dominios para razones de seguridad

+1

Debo haber sido torpe en mi descripción del problema. Lo que quería hacer era obtener una lista de todas las cookies creadas por cualquier documento html en el mismo catálogo. En el documento html, simplemente agregué el siguiente código: var x = document.cookie; window.alert (x); ... y pude ver todas las cookies que había creado. Lo siento si me expresé de una manera poco clara. Gracias por todas las respuestas rápidas. Ya me gusta este sitio :) – Speldosa

+3

También esto no funciona cuando la cookie se ha establecido en valor '' 'httpOnly = true'''. –

+1

Nicer salida a través de 'aString + = i + '' + decodeURIComponent (theCookies [i-1]) +" \ n ";' –

1

No, no hay. Solo puede leer información asociada con el dominio actual.

+0

Maldita :) Ok ... las preguntas de seguimiento: 1. ¿Hay alguna manera de comprobar si existe una cookie específica (con un cierto nombre que usted conoce)? 2. ¿Existe algún tipo de manual para JavaScript donde, por ejemplo, se describa detalladamente la clase document.cookie? – Speldosa

+0

Buen recurso: http://www.w3schools.com/JS/js_cookies.asp – tur1ng

+0

Creo que también. Sin embargo, me gustaría conseguir algo equivalente a esto: http://download.oracle.com/javase/1.4.2/docs/api/overview-summary.html – Speldosa

1

No.

Los únicos navegadores API que te dan para manejar cookies es obtener y establecerlos a través de pares clave-valor. Todos los navegadores manejan las cookies solo por el nombre de dominio.

El acceso a todas las cookies para el dominio actual se realiza a través de document.cookie.

+1

Esto no funciona si ha configurado la cookie con httpOnly, que se recomienda, ya que ayuda a disminuir las consecuencias negativas de un ataque XSS. – Flimm

4
var x = document.cookie; 
window.alert(x); 

Esto muestra todas las cookies a las que tiene acceso el sitio actual. Si, por ejemplo, ha creado dos cookies "username = Frankenstein" y "username = Dracula", estas dos líneas de código mostrarán "username = Frankenstein; username = Dracula". Sin embargo, no se mostrará información como la fecha de caducidad.

+1

Esto no funciona si ha configurado la cookie con 'httpOnly', que se recomienda, ya que ayuda a disminuir las consecuencias negativas de un ataque XSS. – Flimm

0

Esta función devolverá todas las cookies como un objeto (s) anidada:

getDocumentCookies = function() { 
    var theCookies = document.cookie.split(';'), 
     cookieObj = {}, 
     tmp, tmpName, tmpVal; 
    for (var i = 1 ; i <= theCookies.length; i++) { 
     tmp = theCookies[i-1].split('='); 
     if (tmp[0] !== undefined && tmp[1] !== undefined) { 
      tmpName = decodeURIComponent(tmp[0].trim()); 
      tmpVal = decodeURIComponent(tmp[1].trim()); 
      if (tmpName.indexOf('[') > -1 && tmpName.indexOf(']') > -1) { 
       cookieObj[tmpName.split('[')[0]] = cookieObj[tmpName.split('[')[0]] || {}; 
       cookieObj[tmpName.split('[')[0]][tmpName.split('[')[1].replace(']', '')] = tmpVal; 
      } else { 
       cookieObj[tmpName] = tmpVal; 
      } 
     } 
    } 
    return cookieObj; 
}; 
0

Muchas personas ya han mencionado que document.cookie te lleva todas las cookies (excepto los http-only).

Voy a agregar un fragmento para estar al día con los tiempos.

document.cookie.split(';').reduce((cookies, cookie) => { 
    let [ name, value ] = cookie.split('=').map(c => c.trim()); 
    cookies[name] = value; 
    return cookies; 
}, {}); 

El fragmento devolverá un objeto con nombres de cookies como las claves con valores de cookie como valores.

Cuestiones relacionadas