Codice PHP:
/*
USO ###############
if(SrCmndCkes_Leggi('nome')==null) ...
// restituisce il valore, se il cookie non c'è restituisce "null"; se ne sono presenti più di 1 mostra il primo
if(SrCmndCkes_Scrivi('Nome del Cookie' [,'Valore in stringa'] [,'UdM: anni/mesi/giorni/ore/minuti/secondi/GMT: se non specificato è temporaneo', 'tempo'] [,'path: "/" per tutto "" per attuale e figli'] [,'Domain'] [,'Secure: per criptare basta "1" o "secure" mentre vuoto o altro per lasciare così'])) alert('Scrittura non riuscita');
// restituisce TRUE o FALSE a seconda che sia avvenuta o no correttamente la scrittura; la mancanza del valore comporta la cancellazione del cookie, la mancanza dei parametri tempo genera un cookie di sessione, il path "/" è sempre consigliato
if(SrCmndCkes_Cancella('nome' [,'path: "\" per tutto "" per attuale e figli'] [,'Domain'])) alert('OK'); else alert('Ancora No');
// restistuisce TRUE o FALSE; FALSE significa che cmq un cookie con quel nome c'è ancora, e ciò può essere perchè le proprietà non coincidono o perchè ce ne erano più di uno con lo stesso nome
if(SrCmnmCkes_CancellaTutti()) alert('Cookie cancellati'); else alert('Sono rimasti ancora dei cookie');
// restituisce TRUE o FALSE; FALSE significa che dei cookie sono ancora presenti, probabilmente perchè le proprietà non coincidono
if(SrCmndCkes_Visualizza(['nome'])) alert('Il cookie esiste'); else alert('Il cookie non esiste');
// mostra alert con contenuto di tutti i cookie, mettendo in risalto quello eventualmente indicato, con il conteggio delle ripetizioni; restistuisce TRUE, a meno che l'eventuale cookie indicato non esista allora restituisce FALSE;
NOTE ##############
LETTURA: non è possibile leggere le singole proprietà: expires, path, domain , secure
ELIMINAZIONE: non è possibile eliminare tutto insieme con "document.cookie='';", i browser cancellano i cookie nel momento preciso in cui vengono SCRITTI con un qls "expires" scaduto
o nel momento in cui RECUPERANO i cookies con "document.cookie" e trovano che "expires" è scaduto o non esiste; c'è chi per cancellare scrive la scadenza "Thu, 01 Jan 1970 00:00:01 GMT" ma se qualcosa è errato, mentre NN ricoscosce abbastanza tutto IE no, e quindi questo invece che cancellare un cookie ne scrive uno che non scade mai;
non è vero che IE cancella i cookie se si inserisce in contenuto vuoto, è solo un'apparenza, poichè tale contenuto è salvato come "nome;" che quindi nella lettura non viene trovato perchè si cerca "nome=;" quindi sembra cancellato invece c'è, occupa spazio, ed è inutilizzato
*/
function SrCmndCkes_Leggi(CookieNome){
if (CookieNome.length==0) return null;
var PosizioneIniziale = document.cookie.indexOf(CookieNome+"=");
if (PosizioneIniziale == -1) return null;
PosizioneIniziale += CookieNome.length+1; // restituisce la posizione del primo carattere del valore della variabile-cookie
var PosizioneFinale = document.cookie.indexOf(";",PosizioneIniziale);
if (PosizioneFinale == -1) PosizioneFinale = document.cookie.length; // serve perchè se il cookie è l'ultimo non avrà ";"
return unescape(document.cookie.substring(PosizioneIniziale,PosizioneFinale));
}
function SrCmndCkes_Scrivi(name,value,expiresUdM,expires,path,domain,secure){
if (!name) { return false }
if (!value) { return SrCmndCkes_Cancella(name); } // se è vuoto non si può fare la scrittura purtroppo, perchè, mentre in NN esiste il cookie vuoto "nome=;", in IE viene scritto "nome;" e quindi al check non risulta e inoltre occupa spazio
if ((expiresUdM && expires) && (expiresUdM!='GMT')) {
var ExpiresMillisec = ExpiresDate = Oggi = new Date();
switch (expiresUdM) { // calcola i JS-millisecondi del momento di scadenza
case "anni": ExpiresMillisec=Oggi.getTime()+expires*365*24*60*60*1000; break;
case "mesi": ExpiresMillisec=Oggi.getTime()+expires*31*24*60*60*1000; break;
case "giorni": ExpiresMillisec=Oggi.getTime()+expires*24*60*60*1000; break;
case "ore": ExpiresMillisec=Oggi.getTime()+expires*60*60*1000; break;
case "minuti": ExpiresMillisec=Oggi.getTime()+expires*60*1000; break;
case "secondi": ExpiresMillisec=Oggi.getTime()+expires*1000; break;
default: ExpiresMillisec=Oggi.getTime()+expires; // ha poco senso ma qlcs ci andava messo
}
ExpiresDate.setTime(ExpiresMillisec); // converte JS-millisecondi in Date
expires = ExpiresDate.toGMTString(); } // converte Date in GMT-stringa
secure = (secure=="1" || secure==1 || secure=="secure") ? 1 : "";
document.cookie = name + "=" +escape(value) +
( (expiresUdM && expires) ? "; expires=" + expires : "") +
( (path) ? "; path=" + path : "") +
( (domain) ? "; domain=" + domain : "") +
( (secure) ? "; secure" : "");
if (SrCmndCkes_Leggi(name)==null && secure!=1) { return false } else { return true }
}
function SrCmndCkes_Cancella(CookieNome, CookiePath, CookieDomain){
var DoveSiTrovaPrima = document.cookie.indexOf(CookieNome);
if(DoveSiTrovaPrima==-1) { // se non c'è si taglia corto
return true;
} else {
if( CookiePath && CookieDomain) { SrCmndCkes_Scrivi(CookieNome,'cancellato','anni',-1,CookiePath,CookieDomain); } // dovevo inventare un contenuto sennò saltava la scrittura
if( CookiePath && !CookieDomain) { SrCmndCkes_Scrivi(CookieNome,'cancellato','anni',-1,CookiePath); }
if(!CookiePath && CookieDomain) { SrCmndCkes_Scrivi(CookieNome,'cancellato','anni',-1,'',CookieDomain); }
if(!CookiePath && !CookieDomain) { SrCmndCkes_Scrivi(CookieNome,'cancellato','anni',-1); }
var DoveSiTrovaDopo = document.cookie.indexOf(CookieNome);
if(DoveSiTrovaPrima!=DoveSiTrovaDopo) { return true } else { return false } // se Prima<>Dopo vuol dire che qualcosa è stato fatto; si guarda a questo e non alla semplice verifica di lettura perchè in presenza di 2 cookie omonimi la verifica fallirebbe
}
}
function SrCmndCkes_CancellaTutti(){
stringa=document.cookie.split(";");
for(i=0;i<stringa.length;i++) {
var c=stringa[i].split("=");
if(c[0]) SrCmndCkes_Cancella(c[0],'/');
};
return (document.cookie.length==0);
}
function SrCmndCkes_Visualizza(CookieNome){
// recupera info su tutti i cookie
testo= 'STRINGA COOKIES\nContenuto= \"' +unescape(document.cookie)+ '\"\n\n';
esito=1;
// recupera info sul cookie richiesto
if(CookieNome) {
cloni=0;
valore=SrCmndCkes_Leggi(CookieNome);
if(valore==null){
esito=0;
}else{
i=-1;
do { i=document.cookie.indexOf(CookieNome+"=",i+1); if(i!=-1) cloni++; } while(i!=-1);
testo+='SINGOLO COOKIE\nNome= \"' +CookieNome+ '\"\nPrimo Valore= \"' +valore+ '\"\nRipetizioni= '+cloni;
}
}
// produce output
alert(testo);
if(esito==1) return true; else return false;
}