Je veux 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. Quel est le "meilleur" ou le plus concis pour mettre en œuvre cela?Quel est le "meilleur" moyen d'obtenir et de définir une seule valeur de cookie en utilisant JavaScript
Répondre
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)
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 });
}
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 ...
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
Il vous manque échappement et unescape pour la valeur – hultqvist
Notez que toGMTString est maintenant obsolète en faveur de toUTCString – BeauCielBleu