Javascript document.cookie siempre devuelve una cadena vacía

5 minutos de lectura

avatar de usuario
Menztrual

Tengo este problema realmente extraño con las cookies de configuración de javascript del lado del cliente. Estoy desarrollando una pequeña demostración de 1 página en este momento para usar cookies para almacenar algunas ‘preferencias’. Tenga en cuenta que no puedo usar un idioma del lado del servidor para esta demostración ni ningún complemento de jQuery de terceros.

Así que he escrito un objeto javascript para establecer una cookie:

var cookie = {
  set: function (name,value,exdays) {

    var exdate = new Date();
    exdate.setDate(exdate.getDate() + exdays);
    var value = escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
    document.cookie=name + "=" + value;
    console.log(document.cookie);
  }
}

cookie.set('foo','bar',2);
console.log(document.cookie);

Simplemente devuelve una cadena vacía. Entré en la consola de Chrome para ver si puedo hacerlo modificando directamente document.cookie

> document.cookie = "foo=bar";
"foo=bar"
> document.cookie
""

¿Cómo se configura una cookie a través de javascript del lado del cliente?

Editar: no estoy en modo incógnito y las cookies están habilitadas.

  • Ver también desarrollador.mozilla.org/en-US/docs/DOM/document.cookie

    – Aram Kocharyan

    10 de abril de 2013 a las 0:13

  • Tener un problema similar (pero no el mismo). Podemos leer y escribir cookies, pero no todas. Específicamente, la cookie de sesión (JSESSIONID) no se puede leer… Parece que se trata de una función de seguridad, pero es difícil encontrar información sobre ella… ¿Alguien sabe sobre esto?

    – Stijn de Witt

    15 de agosto de 2013 a las 11:31

  • @StijndeWitt: Esa es una pregunta diferente, pregúntela por sí sola en lugar de agregar una recompensa a esto. Por cierto, la respuesta probablemente sea http-only galletas

    – Bergi

    15 de agosto de 2013 a las 12:14

avatar de usuario
Stijn de Witt

No se puede acceder a las cookies HttpOnly desde Javascript y las cookies de sesión generalmente se configuran como cookies HttpOnly. Consulte también esta pregunta de StackOverflow: Cómo leer una cookie segura usando JavaScript

Así que… comprueba si la cookie que quieres leer tiene el indicador ‘HttpOnly’ establecido… Si es así, conoces al culpable. ¡No es un error, es una característica!

  • me resulta desconcertante por qué la “respuesta” obtuvo tantos votos a favor, ya que es imposible configurar HttpOnly en una cookie escrita en javascript.

    – Sin idea de nombre

    5 de julio de 2016 a las 12:17

  • Título: Javascript document.cookie always empty string. Respuesta: Puede ocurrir cuando solo hay cookies con el HttpOnly conjunto de banderas no, no puedes escribe estas cookies de JS, pero puede intento de lea las cookies de JS y devolverá… una cadena vacía… aunque vea la cookie en los encabezados HTTP y en el inspector del navegador, JS no le permitirá leerla.

    – Stijn de Witt

    5 de julio de 2016 a las 18:53

  • Creo que obtuvo votos a favor porque: 1) la gente a menudo intenta leer, por ejemplo, la cookie de sesión de JS. 2) Obtienen una cadena vacía como resultado. 3) Ellos googlean y vienen aquí. 4) Ven esta respuesta y maldita sea, eso es exactamente lo que está sucediendo. 5) Gracias hombre +1. 🙂

    – Stijn de Witt

    5 de julio de 2016 a las 18:55

  • bueno, eso es una lástima, porque la respuesta no responde a la PREGUNTA que es claramente para escribir cookies en js

    – Sin idea de nombre

    5 julio 2016 a las 20:30

  • ¿Qué pasa si la galleta es no Solo Http. ¿Hay alguna otra causa para este problema?

    – alayor

    2 de agosto de 2017 a las 17:01

No puede configurar cookies por el aspecto de las cosas si no se está ejecutando en un servidor web.

file:///C:/Users/me/Desktop/demo/demo.html

sin embargo:

http://localhost/demo/demo.html obras.

  • Esto me atrapó un par de veces antes de que me diera cuenta.

    – Jordan Gris

    20 de agosto de 2013 a las 10:38

  • en realidad, las cookies no funcionarán correctamente con localhost, necesitará un dominio “válido”, incluso si es la IP, como 127.0.0.1 o 0.0.0.0, por ejemplo. consulte stackoverflow.com/questions/1134290/…

    – Felipe Sabino

    21 de agosto de 2013 a las 2:31


  • también me confundió mucho y, por supuesto, en la mayoría de los tutoriales creen que deberíamos saberlo de alguna manera

    – Все Едно

    13 de junio de 2017 a las 14:42

  • En realidad, Firefox permite que las cookies se lean desde una página de archivo. Chrome e IE no

    – Nicolás Z

    1 de septiembre de 2018 a las 19:28


  • Para los usuarios de Python, puede ir al directorio de trabajo donde se encuentran los archivos y luego ejecutar el comando: python3 -m http.server.

    – Carson

    8 de junio de 2020 a las 5:48

Esto funcionó para mí cuando se ejecutó desde localhost, ejecutando chrome 28.0.1472.0 canary:

<!DOCTYPE html>
<html>
<head>
  <title>localhost cookie</title>
</head>
<body>
  <script type="text/javascript">
    console.log(document.cookie);
    var myCookie = "mycookie=hellocookie";
    document.cookie = myCookie;
  </script>
</body>
</html>

Ejecútelo en un servidor, visite la página y mire su almacén de cookies, actualice la página y mire su consola.

No establecía una cookie cuando se abría como un archivo, pero funcionaba cada vez que se abría desde el servidor.

Para uso y documentos, consulte aquí:

https://developer.mozilla.org/en-US/docs/DOM/document.cookie

si estas en Modo incognito o tiene las cookies deshabilitadas, no funcionará.

Es posible que haya establecido una ruta incorrecta para la cookie.

En mi caso yo pondría el path en la galleta para /foo porque la aplicación normalmente está en la dirección http://example.org/foo. Sin embargo, durante las pruebas, abrí la aplicación en la dirección predeterminada. http://localhost:3000 lo que me permitió crear cookies con la ruta /foo pero no leerlos. La solución fue probar la aplicación en la dirección http://localhost:3000/foo.

avatar de usuario
tanmaygupta24

  1. la cookie no funcionará si abre directamente su archivo, digamos index.html

    archivo:///C:/Users/me/Desktop/index.html

  2. sin embargo: la cookie funcionará si la página (index.html) se abre utilizando un servidor ligero o un servidor local

    http://localhost/demo/demo.html funciona. o
    http://127.0.0.1:5500/temp6.html

  3. Para Live Server en VS Code, puede usar Live Serve de Ritwick Dey
    ingrese la descripción de la imagen aquí

¿Ha sido útil esta solución?