grazie dell'aiuto
dopo nottate di intense letture e test, metto a disposizione di tutti 2 codici di mia creazione: file cookies.js che contiene tutte le operazioni, e di una pagina cookies.htm per la gestione degli stessi
poichè in rete non c'è niente in merito credo vi possano esser d'aiuto
anzi, se qualcuno volesse proporre migliorie ne sarei grato 
nb: contengono anche i commenti relativi alle regole di funzionamento che ho riscontrato
codice:
/*
CookieLeggi
OUTPUT: restituisce il valore, se il cookie non c'è restituisce "null"; se ne sono presenti più di 1 mostra il primo, ovvero quello più specifico; es: var AAA = CookieLeggi(nome) || "anonimo";
INPUT: ('Nome del Cookie')
CookieScrivi
OUTPUT: restituisce TRUE o FALSE a seconda che sia avvenuta o no correttamente la scrittura; la scrittura ha un ordine: dal più specifico al più generico "/"; es: if (!CookieScrivi(document.cok.ckNome.value,document.cok.ckDato.value,document.cok.exSimb.value,document.cok.exDato.value,document.cok.ckPat.value,document.cok.ckDom.value,document.cok.ckSec.value)) alert('Scrittura non riuscita');
INPUT: ('Nome del Cookie', 'Valore', 'UdM: anni/mesi/giorni/ore/minuti/secondi/GMT', 'tempo', 'path: "\" per tutto "" per attuale e figli', 'Domain', 'Secure: per criptare basta "1" o "secure" mentre vuoto o altro per lasciare così')
CookieCancella
OUTPUT: restituisce TRUE o FALSE a seconda che sia avvenuta o no correttamente la cancellazione; restituire FALSE quando rimane cmq un cookie con quel nome e ciò può essere perchè le proprietà non coincidono o perchè ce ne erano più di uno con lo stesso nome; es: if (!CookieCancella(document.cok.ckNome.value)) alert('Cancellazione non riuscita')
INPUT: ('Nome del Cookie', 'Path: "\" per tutto "" per attuale e figli', 'Domain')
*/
function CookieLeggi(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 CookieScrivi(name,value,expiresUdM,expires,path,domain,secure)
{
if (!name || !value) { return false } // se uno dei 2 valori è vuoto evita la scrittura, 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 (CookieLeggi(name)==null && secure!=1) { return false } else { return true }
}
function CookieCancella(CookieNome,CookiePath,CookieDomain)
{
var DoveSiTrovaPrima = document.cookie.indexOf(CookieNome);
if(DoveSiTrovaPrima==-1) { // se non c'è si taglia corto
return true;
} else {
{ CookieScrivi(CookieNome,'cancellato','anni',-1,CookiePath,CookieDomain); } // dovevo inventare un contenuto sennò saltava la scrittura
// if( CookiePath && !CokieDomain) { CookieScrivi(CookieNome,'cancellato','anni',-1,CookiePath); }
// if(!CookiePath && CokieDomain) { CookieScrivi(CookieNome,'cancellato','anni',-1,'',CookieDomain); }
// if(!CookiePath && !CokieDomain) { CookieScrivi(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
} }
// 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
// nb: 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
// nb: 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 CookieVisualizza(CookieNome)
{
// conta il numero di cloni
if(CookieNome) {
var i = cloni = 0;
while ( i!=-1 ) {
i = document.cookie.indexOf(CookieNome,i+1);
if (i!=-1) cloni++; }
} else {
var cloni = ''; }
// elabora il testo di output
var valore = (CookieLeggi(CookieNome)!=null) ? CookieLeggi(CookieNome) : '';
var testo= 'STRINGA COOKIES\nContenuto= \"'+unescape(document.cookie)+'\"\n\nSINGOLO COOKIE\nNome= \"'+CookieNome+'\"\nValore= \"'+ valore +'\"\nRipetizioni= '+cloni;
alert(testo);
}
// non è possibile leggere le singole proprietà: expires, path, domain , secure
codice:
<HTML>
<HEAD>
<TITLE>Javascript - Cookies - prova</TITLE>
<SCRIPT language='JavaScript' src="cookies.js" type=text/JavaScript></SCRIPT>
<SCRIPT type="text/javascript" language="JavaScript"> // eseguo subito le operazioni d'utilità generale
function StampaCookie(nome)
{
document.getElementById('tes').innerHTML = unescape(document.cookie);
document.getElementById('nom').innerHTML = nome;
document.getElementById('con').innerHTML = CookieLeggi(nome);
}
</SCRIPT>
</HEAD>
<BODY>
<form name="cok">
<TABLE border=1>
<TR><TD>[B]VARIABILE</TD><TD>[B]INPUT</TD><TD>[B]OUTPUT</TD></TR>
<TR><TD>TESTO INTERO</TD><TD></TD><TD id="tes"></TD></TR>
<TR><TD>NOME</TD><TD><input type="text" name="ckNome" size=15></TD><TD id="nom"></TD></TR>
<TR><TD>CONTENUTO</TD><TD><input type="text" name="ckDato" size=15></TD><TD id="con"></TD></TR>
<TR><TD>EXPIRES</TD><TD><input type="text" name="exSimb" size=2><input type="text" name="exDato" size=11>
anni, mesi, giorni, ore, minuti, secondi, GTM</TD><TD id="exp"></TD></TR>
<TR><TD>PATH</TD><TD><input type="text" name="ckPat" size=15>
"/"per tutto il dominio, [vuoto] per il path specifico e figli</TD><TD id="pat"></TD></TR>
<TR><TD>DOMINIO</TD><TD><input type="text" name="ckDom" size=15>
[ vuoto ] per l'attuale dominio, altrimenti va spicificato ".dominio.it"</TD><TD id="dom"></TD></TR>
<TR><TD>SECURE</TD><TD><input type="text" name="ckSec" size=15>
1=cripta; altro=non criptato</TD><TD id="sec"></TD></TR>
</TABLE>
<input type="button" value="SCRIVI" onclick="if (!CookieScrivi(document.cok.ckNome.value,document.cok.ckDato.value,document.cok.exSimb.value,document.cok.exDato.value,document.cok.ckPat.value,document.cok.ckDom.value,document.cok.ckSec.value)) alert('Scrittura non riuscita');">
<input type="button" value="LEGGI" onclick="StampaCookie(document.cok.ckNome.value)">
<input type="button" value="CANCELLA" onclick="if (!CookieCancella(document.cok.ckNome.value,document.cok.ckPat.value,document.cok.ckDom.value)) alert('Cancellazione non riuscita: forse ce ne sono più di uno o le proprietà non coincidono');">
<input type="button" value="ALERT" onclick="CookieVisualizza(document.cok.ckNome.value)">
</form>
</BODY>
</HTML>