2008-11-04 9 views

Répondre

26

volés 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); 
} 

utilisant:

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

comme indiqué dans les commentaires, vous devriez lancer un int depuis que les cookies sont stocké et renvoyé en tant que chaînes. En utilisant foo++ ou ++foo sera effectivement jeté pour vous, mais il est plus sûr de savoir exactement ce que vous travaillez avec:

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

readCookie renvoie une sous-chaîne, vous devez le convertir en nombre lors de l'incrémentation de 1, sinon vous aurez , 1, 11, 111, 1111 ... – CMS

+0

Il vous manque échappement et unescape pour la valeur – hultqvist

+2

Notez que toGMTString est maintenant obsolète en faveur de toUTCString – BeauCielBleu

7

La plupart des anciennes fonctions de gestion des cookies que j'ai vu utiliser des manipulations de cordes simples pour stocker une valeur de la récupération, comme this exemple, vous pouvez utiliser d'autres bibliothèques, comme cookie-js, une petite (< 100 lignes) utilitaire pour cookies accès.

j'utilise jQuery sur mes projets, et j'utilise le jQuery Cookie Plugin, il est d'utiliser très simple:

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 meilleure façon est toujours le plus simple:

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; 
} 

ces fonctions attendent la valeur pour être une chaîne simple, mais vous pouvez toujours JSON.stringify si vous voulez ou peut-être faire quelque chose d'autre avec elle ...