2008-11-04 14 views

Respuesta

26

Robados de http://www.quirksmode.org/js/cookies.html#script

function createCookie(name,value,days) { 
    if (days) { 
     var date = new Date(); 
     date.setTime(date.getTime()+(days*24*60*60*1000)); 
     var expires = "; expires="+date.toUTCString(); 
    } 
    else var expires = ""; 
    document.cookie = name+"="+value+expires+"; path=/"; 
} 

function readCookie(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; 
} 

function eraseCookie(name) { 
    createCookie(name,"",-1); 
} 

usarlo:

var oldCount = parseInt(readCookie('hitCount'), 10) || 0; 
createCookie('hitCount', oldCount + 1, 7); 

como se señala en los comentarios, debe convertir a int ya que las cookies son almacenado y devuelto como cadenas. Usando foo++ o ++foo realidad echará para usted, pero es más seguro para saber exactamente lo que está trabajando:

var x = "5"; // x = "5" (string) 
x += 1;  // x = "51" (string!) 
x += 5;  // x = "515" (string!) 
++x;   // x = 516 (number) 
+0

readCookie devuelve una subcadena, debe convertirla como un número al aumentar 1, de lo contrario tendrá , 1, 11, 111, 1111 ... – CMS

+0

Falta un escape y unescape para el valor – hultqvist

+2

Tenga en cuenta que toGMTString ha quedado en desuso en favor de toUTCString – BeauCielBleu

7

La mayor parte de las funciones de manejo de galletas que he visto usar manipulaciones de cadenas sencillas para almacenar unos valores de recuperación, como this ejemplo, puede utilizar otras bibliotecas, como cookie-js, un pequeño (100 líneas) < utilidad para galletas acceso.

Yo personalmente uso de jQuery en mis proyectos, y utilizo el jQuery Cookie Plugin, es muy fácil de usar:

var cookieName = "increment"; 

if ($.cookie(cookieName) == null){ 
    $.cookie(cookieName, 1, { expires: 10 }); 
}else{ 
    var newValue = Number($.cookie(cookieName)) + 1; 
    $.cookie(cookieName, newValue, { expires: 10 }); 
} 
0

la mejor manera es siempre la más sencilla:

function getCookie(name) { 
    return (name = (document.cookie + ';').match(new RegExp(name + '=.*;'))) && name[0].split(/=|;/)[1]; 
} 

// the default lifetime is 365 days 
function setCookie(name, value, days) { 
    var e = new Date; 
    e.setDate(e.getDate() + (days || 365)); 
    document.cookie = name + "=" + value + ';expires=' + e.toUTCString() + ';path=/;domain=.' + document.domain; 
} 

estas funciones esperan que el valor para ser una cadena simple, pero siempre puede JSON.stringify si lo desea o tal vez hacer algo más con él ...

Cuestiones relacionadas