Quel est le "meilleur" moyen d'obtenir et de définir une seule valeur de cookie en utilisant JavaScript

Je souhaite incrémenter une valeur de cookie chaque fois qu'une page est référencée, même si la page est chargée depuis le cache. Quelle est la manière «la meilleure» ou la plus concise de mettre en œuvre?

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

En l'utilisant:

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

Comme indiqué dans les commentaires, vous devez lancer un int puisque les cookies sont stockés et retournés sous forme de chaînes. L'utilisation de foo++ ou ++foo va vraiment vous mener, mais il est plus sûr de savoir exactement avec quoi vous travaillez:

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

La plupart des anciennes fonctions de manipulation de cookies que j'ai vu utilisent des manipulations de chaînes simples pour stocker des valeurs de récupération, comme cet exemple, vous pouvez utiliser d'autres bibliothèques, comme cookie-js , un petit utilitaire (<100 lignes) pour l'accès aux cookies.

Personnellement, j'utilise jQuery sur mes projets, et j'utilise le jQuery Cookie Plugin , c'est vraiment simple à utiliser:

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

La meilleure façon est toujours la 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 s'attendent à ce que la valeur soit une chaîne simple, mais vous pouvez toujours la JSON.stringify si vous voulez ou peut-être faire autre chose avec elle …