Uppdatera cookies i JavaScript

Att faktiskt uppdatera en cookie är något annorlunda än att bara ersätta en cookie genom att det nya värdet vi vill placera i cookien på något sätt beror på om cookien redan finns och i så fall vad den innehåller. Det betyder att vi måste läsa den befintliga cookien innan vi kan skriva en ersättning för den.

En sak att notera är att när vi läser en cookie har vi inget sätt att berätta när den befintliga cookien ska löpa ut eller om cookien är begränsad till en specifik mapp eller tillgänglig i hela domänen. Du måste ställa in en ny lagringsperiod när du byter ut cookien och måste hålla reda på vilken räckvidd du vill att cookien ska ha på dina sidor för att tillämpa samma domän eller banalternativ varje gång. Det enda du faktiskt kan läsa när du uppdaterar snarare än att bara byta ut en cookie är det verkliga värdet på de data som lagras i cookien.

I det här exemplet kommer vi att använda en cookie med namnet 'accesscount' för att räkna antalet gånger våra besökare har öppnat vår sida där högst sju dagar har gått mellan besök. Om det går mer än sju dagar mellan besök, kommer cookien att löpa ut och nästa besök kommer att starta om från noll. Vi använder funktionerna allCookies () och writeCookie () från tidigare exempel, så det enda stycket med ny kod vi behöver för att faktiskt kunna utföra uppdateringen är i de två sista raderna.

var cookie;
allCookies = funktion ()
var cr, ck, cv;
cr = []; if (document.cookie! = ")
ck = document.cookie.split (';');
för (var i = ck.length - 1; i> = 0; i--)
cv = ck.split ('=');
cr [ck [0]] = ck [1];


returnera cr;
;
writeCookie = funktion (cname, cvalue, dagar, opt)
var dt, expires, option;
if (dagar)
dt = nytt datum ();
dt.setTime (dt.getTime () + (dagar * 24 * 60 * 60 * 1000));
expires = "; expires =" + dt.toGMTString ();
annat går ut = ";
if (opt)
if ('/' = substr (opt, 0,1)) option = "; path =" + opt;
annat alternativ = "; domän =" + opt;
annat alternativ = ";
document.cookie = cname + "=" + cvalue + expires + option;

cookie = allCookies ();
if (cookie.accesscount! = null) writeCookie ('mycookie', cookie.accesscount + 1,7);
annat skrivCookie ('mycookie', 1,7);