¿Por qué Chrome ignora las cookies jQuery locales?

83

Estoy utilizando el plugin de jQuery Cookie ( descarga y de demostración y código fuente con los comentarios ) para establecer y leer una cookie. Estoy desarrollando la página en mi máquina local .

El siguiente código establecerá correctamente una cookie en FireFox 3, IE 7 y Safari (PC). Pero si el navegador es Google Chrome Y la página es un archivo local , no funciona.

$.cookie("nameofcookie", cookievalue, {path: "/", expires: 30});

Lo que sé :

  • La demostración del complemento funciona con Chrome.
  • Si pongo mi código en un servidor web (la dirección comienza con http: //), funciona con Chrome.

Entonces, la cookie solo falla para Google Chrome en archivos locales .

Posibles causas :

  • Google Chrome no acepta cookies de páginas web en el disco duro (rutas como file: /// C: /websites/foo.html)
  • Algo en la implementación del complemento hace que Chrome rechace dichas cookies.

¿Alguien puede confirmar esto e identificar la causa raíz?

Nathan Long
fuente
Cuando dices que la demostración funciona, ¿te refieres a si la guardas en tu disco duro y accedes a ella como file: //?
Greg
No, solo accediendo al enlace de arriba con Chrome.
Nathan Long

Respuestas:

94

Chrome no admite cookies para archivos locales (o, como mencionó Peter Lyons, localhost *) a menos que lo inicie con la marca --enable-file-cookies. Puede leer un debate al respecto en http://code.google.com/p/chromium/issues/detail?id=535 .

* Chrome hace las galletas de apoyo si se utiliza la dirección IP local (127.0.0.1) directamente. así que en el caso de localhost, esa podría ser una solución más fácil.

Matthew Crumley
fuente
Configurar el dominio a la IP no funcionó para mí, pero funcionó si
eliminé
En Mac OSX, para iniciar Chrome con la bandera --enable-file-cookies, use un comando de terminal: 'open / Applications / Google \ Chrome.app/Contents/MacOS/Google \ Chrome --args --enable-file-cookies' - (o modifíquelo de acuerdo con su ubicación de Chrome.app)
Peeech
5

Tuve algún problema y lo resolví con esta terrible solución. usando el complemento de tienda y cookie juntos.

<script src="js/jquery.cookies.2.2.0.js" type="text/javascript"></script>
<script src="js/jquery.Storage.js" type="text/javascript"></script>

var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;

//get cookies
var helpFlag=(is_chrome)?$.Storage.get("helpFlag"):$.cookies.get("helpFlag");

//set cookies
if(is_chrome)$.Storage.set("helpFlag", "1");else $.cookies.set("helpFlag", "1");

Sé que esta no es la solución perfecta, pero funciona para mí.

Serdar Güner
fuente
4

Esto hizo el trabajo por mí:

ingrese la descripción de la imagen aquí

Haga clic derecho en su icono de Chrome y seleccione Propiedades, pestaña Acceso directo y agregue --enable-file-cookies en la última ruta de destino.

paulalexandru
fuente
3

Tuve el mismo problema, intente usar la dirección IP de localhost en su lugar. Por ejemplo, "http://127.0.0.1/yoursite/"

Tiji
fuente
3

consulte Cookies y Google Analytics .

$.cookie("nameofcookie", cookievalue, {path: "/", expires: 30});

cambia esta línea a

$.cookie("nameofcookie", cookievalue, {*Path:* "/", expires: 30});

este proyecto funciona bien.

chaoxfu
fuente
1
Gracias, cambiar el caso a "Ruta" soluciona mi problema
Otto Kanellis
2

Otra posible causa es que path: "/", dado que no está utilizando una URL web normal, /probablemente no signifique mucho; intente sin establecer la ruta en absoluto.

Greg
fuente
Buen pensamiento, pero '/' es el predeterminado de todos modos. Intenté 'file: /// C: /' pero creo que eso es una tontería en este contexto.
Nathan Long
0

Si usa chrominum, este es el comando para habilitar las cookies locales

Chrome-browser - habilita-file-cookies

Es lo mismo para Chrome

¡Espero que esto te ayude!

Elyes Frikha
fuente
0

Como solución alternativa, puede usar Tampermonkey con acceso a archivos locales ( ¿Cómo incluir páginas htm locales en un script de Tampermonkey? ) De esa manera, usará el almacenamiento de Tampermonkey y podrá configurar y obtener sus datos mediante las funciones GM_getValue (datos) y GM_setValue (datos). Lo usé para mi página HTML local, que usé como alternativa personalizable al Explorador de Windows

Pero en realidad, localStorage de la respuesta de Yuri funciona perfectamente.

Yaroslav Wally
fuente