2012-01-29 16 views
11

Estoy desarrollando una aplicación usando jQuery que usa cookies. En este momento, se encuentra en el application.html en el escritorio de mi PC.¿Por qué la cookie jQuery no configura una cookie?

Sin embargo, no puedo almacenar y recuperar una cookie. Incluí jquery-1.7.1.min.js, json2.js y jquery.cookie.js en mi archivo HTML en ese orden.

Así es como estoy almacenando una cookie para una duración de 7 días:

$.cookie("people", JSON.stringify(people_obj_array), {expires: 7}); 

la matriz mundial people_obj_array parece

[ 
     { 
      "name": "Adam", 
      "age": 1, 
     }, 
     { 
      "name": "Bob", 
      "age": 2, 
     }, 
     { 
      "name": "Cathy", 
      "age": 3, 
     }, 
    ] 

Cuando la prueba cifrado JSON con alert(JSON.stringify(people_obj_array)), se ve bien:

JSON test

Sin embargo, cuando recupero esta cookie a través de:

alert($.cookie("people")); 

incluso antes de actualizar la página, una alerta emergente que dice "nula". ¿No debería el texto ser la cadena JSON de alerta? ¿Estoy usando la biblioteca de cookies JQuery correctamente?


Solo para aclarar, aquí es cómo estoy probando:

$.cookie("people", JSON.stringify(people_obj_array), {expires: 7}); // store 
alert($.cookie("people")); // attempt to retrieve 

tengo Firebug, y estoy dispuesto a hacer algunas pruebas de la consola.

+2

Creo que el problema es que el mecanismo de la cookie no está definido para los archivos en el disco local. ¿Has intentado configurar un servidor web local y publicar tu archivo como 'http: // localhost/application.html'? –

+0

Gracias! Terminé simplemente usando almacenamiento local. Es mucho más sencillo y funciona tanto localmente como en un servidor web. La desventaja es, por supuesto, los navegadores más antiguos no lo admiten, lo cual está bien para mí. http://coding.smashingmagazine.com/2010/10/11/local-storage-and-how-to-use-it/ – dangerChihuahua007

Respuesta

11

Probablemente es el hecho de que el archivo está en su escritorio que está causando el problema. Los navegadores normalmente se comportan al servir las cookies según el dominio del que se recibieron y su ruta.

Es posible que no pueda leer la cookie inmediatamente después de configurarla: Escribir una cookie implica establecer encabezados en una solicitud HTTP y, de la misma manera, leerlos implica leer encabezados en una respuesta HTTP.

Pruebe alojar su página en un servidor web y vea si eso le funciona.

+0

Gracias, alojé el sitio en un servidor web público, y las cookies funcionaron. Esta página tiene más detalles: http://code.google.com/p/chromium/issues/detail?id=535 – dangerChihuahua007

+1

@DavidFaux parece que estás usando Chromium, así que puedo asumir que también estás usando Linux ... bueno si desea configurar un servidor web local para la prueba, puede 'sudo apt-get install lamp-server^', luego' sudo adduser www-data', luego los dos comandos siguientes. 'sudo chown -R www-data: www-data/var/www' y' sudo chmod -R g + rw/var/www' deberían hacerlo. entonces todo su desarrollador web entra en '/ var/www' y lo prueba navegando a http: // localhost/ – rlemon

+0

gracias por la respuesta :) –

1

De mi investigación jquery.cookie.js es bastante antiguo, y no parece que se mantendrá más. Puede tener mejor suerte usando this library en su lugar. Su descripción en Google Code es "Javascript Cookie Library con enlaces jQuery y soporte JSON", e incluye métodos para todo lo que estás tratando de hacer.

+0

Gracias, lo tendré en cuenta. – dangerChihuahua007

+0

Última actualización de jquery.cookie hace 7 días, el 2013-09-11. Estamos usando ese componente que es muy útil. – foxontherock

+0

Podría ser que recogieron el desarrollo de nuevo. Cuando hice este comentario, la biblioteca no se había actualizado en más de 2 años. – daniel0mullins

2

Si tiene problemas con el complemento de cookies, ¿por qué no solo crea sus propias funciones de cookies? Leer, Escribir y (opcional) eliminar.

var createCookie = function(name, value, days) { 
    if (days) { 
     var date = new Date(); 
     date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); 
     var expires = '; expires=' + date.toGMTString(); 
    } 
    else var expires = ''; 
     document.cookie = name + '=' + value + expires + '; path=/'; 
}; 
var readCookie = function(name) { 
    var nameEQ = name + '='; 
    var ca = document.cookie.split(';'); 
    for (var i = 0; i < ca.length; i++) { 
     var c = ca[i]; 
     while (c.charAt(0) == ' ') c = c.substring(1, c.length); 
     if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length); 
    } 
    return null; 
}; 
var eraseCookie = function(name) { 
    createCookie(name, '', -1); 
}; 

que no puedo comentar sobre el complemento específico, ya que nunca he utilizado .. sin embargo estas funciones todo el trabajo y han sido probados.

Así que para su ejemplo:

createCookie("people", JSON.stringify(people_obj_array), 7); // store 
alert(readCookie("people")); // retrieve 
eraseCookie("people"); // remove 
alert(readCookie("people")); // oo look i'm no longer here. 
+1

¿Seguro que esto funciona para páginas web en el disco local? AFAIK algunos navegadores no manejan las cookies locales en absoluto. –

+1

No he probado ese caso ... sin embargo, si las cookies no están disponibles localmente, suponiendo que el OP está usando un navegador moderno * el almacenamiento local * debería funcionar ... – rlemon

+0

¡Gracias! El almacenamiento local está funcionando brillantemente. Es tan simple también. http://coding.smashingmagazine.com/2010/10/11/local-storage-and-how-to-use-it/ – dangerChihuahua007