30nov 2009
Gérer des cookies avec Javascript
14:18 - Par Voulf - Javascript - 2 commentaires
J'utilise depuis longtemps un script de Scott Edwards avec une petite adaptation, pour le rendre privé, pour gérer des cookies, c'est extrêmement simple :
/*
* @name cookie
* @createCookie (method) static
* @readCookie (method) static
* @deleteCookie (method) static
* @param sName (string) Cookie variable name
* @param sValue (string) Cookie variable value
* @param iDays (integer) Cookie duration in days; empty is for session
*/
(cookie = function (){
//Based on Scott Andrew script
this.createCookie = function createCookie(sName,sValue,iDays) {
if (sDays) {
var dDate = new Date();
dDate.setTime(dDate.getTime()+(iDays*24*60*60*1000));
var sExpires = "; expires="+date.toGMTString();
}
else var sExpires = "";
document.cookie = sName+"="+sValue+sExpires+"; path=/";
}; //createCookie
this.readCookie = function readCookie(sName) {
var nameEQ = sName + "=";
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;
}; //readCookie
this.deleteCookie = function deleteCookie(sName){
dDate = new Date;
dDate.setFullYear(dDate.getFullYear()-1);
createCookie(sName, null, dDate);
}; //deleteCookie
return {
createCookie : this.createCookie,
readCookie : this.readCookie,
deleteCookie : this.deleteCookie
}
})();
Si je veux créer un cookie, il faut instancier l'objet cookie :
cCookie = new cookie();
puis appeler la méthode createCookie(); avec les paramètres nécessaires, si l'on omet le troisième, le cookie est valable le temps de la session :
cCookie.createCookie( 'hasVisited', 'true', 10 );
pour le lire, on rappelle le nom de la valeur à lire :
cCookie.readCookie( 'hasVisited' );
et enfin pour l'effacer on appelle la méthode deleteCookie(); avec toujours le nom de la valeur à supprimer :
cCookie.deleteCookie( 'hasVisited' );
Attention la valeur du cookie 'hasVisited' est de type String et non booléen, ainsi pour comparer la valeur, on utilise :
if ( cCookie.readCookie('hasVisited') == 'true' ) instructions
et non
if (cCookie.readCookie('hasVisited')) instructions
qui serait toujours faux.
2 commentaires
(je rattrape mes retards de lecture dans l'agrégateur)
A vue de nez, il manque une parenthèse fermante dans ton test sur la valeur du readCookie.
Merci Olivier =)