Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23
  1. #1

    [COOKIE] qual'è la teoria per cancellarli ?

    di esempi su come cancellare i cookie se ne trovano infiniti ...ma io voglio la logica di fondo e non la trovo !!!

    ma soprattutto nessuno tiene di conto della differenza tra i cookie permanenti e quelli temporanei o "magic"

    ovvero
    - c'è chi dice che bisognare riscrivere il cookie con value="" ...ma perchè? allora un cookie con contenuto vuoto non lo posso avere?
    - c'è chi dice che bisogna impostare la data a ritroso ...ma se faccio così la cancella subito, alla chiusura delle finestra, o al riaccesso nel sito stesso?
    - c'è chi dice di imposare "expires=;" così viene cancellato immediatamente
    - c'è chi dice di imposare "expires=0;" o di non specificarlo ...così diventa magic e non viene cancellato subito
    - c'è chi stranamente dice che bisogna ridargli anche il contenuto in modo identico ...non capisco che c'entri

    non ne posso più !!

    si può sapere una volta per tutte, e semplicemente, come posso:
    - cancellare immediatamente
    - cancellare alla chiusura della finestra


    Farmacia di Jarno - le mie pillole: Cookie [#780810], Dom4Php4 [#1123236], Fade [#1139489], getCssProperty [#1152911]
    Inchinatevi difronte al Prof! Nacchio!

    A me pare che l'uomo vada avanti con la retromarcia

  2. #2
    devi impostare la sua data, ad una data MINORE in formato .GMT Sring. di quella attuale (del client) cosi viene cancellato subito (apparentemente anche se forse rimane nella cache, NON è comunque leggibile).


    per cancellare alla chiusura della finesta, non metti NESSUN
    expire: scade alla fine delle sessione del browser OVVERO quando viene chiuso (ogni istanza nel caso di IE)
    DYNAMIC+ [ E-mail ]

    Secondo me non si può fare!

  3. #3
    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>
    Farmacia di Jarno - le mie pillole: Cookie [#780810], Dom4Php4 [#1123236], Fade [#1139489], getCssProperty [#1152911]
    Inchinatevi difronte al Prof! Nacchio!

    A me pare che l'uomo vada avanti con la retromarcia

  4. #4
    non so perchè vengano messi nel codice degli accapi che non ho fatto ...se i moderatori volessero controllare grazie
    Farmacia di Jarno - le mie pillole: Cookie [#780810], Dom4Php4 [#1123236], Fade [#1139489], getCssProperty [#1152911]
    Inchinatevi difronte al Prof! Nacchio!

    A me pare che l'uomo vada avanti con la retromarcia

  5. #5
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Aggiunta agli script/discussioni utili

    Per leggere il codice esattamente come e' stato postato occorre cliccare su QUOTA

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  6. #6
    wow che onore !! ...tenendo conto che sono alle prime armi con javascript
    cmq se avete suggerimenti per migliorare o rendere più efficiente il codice fate pure

    - non sarebbe male introdurre qualche funzione per la gestione dei cookie multipli
    - per il conteggio dei cookie "cloni" ho utilizzato una struttura "while" ...ma possibile che javascript non abbia una funzione di conteggio della presenza del testo B nel testo A !?!?
    Farmacia di Jarno - le mie pillole: Cookie [#780810], Dom4Php4 [#1123236], Fade [#1139489], getCssProperty [#1152911]
    Inchinatevi difronte al Prof! Nacchio!

    A me pare che l'uomo vada avanti con la retromarcia

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Originariamente inviato da Jarno
    ...ma possibile che javascript non abbia una funzione di conteggio della presenza del testo B nel testo A !?!?
    Come no??
    A parte che esiste
    str.indexOf()
    , la ricerca di testo si fa con le RegExp.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  8. #8

    CORREZIONE

    x i moderatori: se potete modificare il codice originale e cancellare questo intervento ...sarebbe più carino

    c'è da modificare il codice della funzione CANCELLA ..avevo fatto alcuni errori :rollo:
    codice:
    function CookieCancella(CookieNome,CookiePath,CookieDomain)
    	{
    	var DoveSiTrovaPrima = document.cookie.indexOf(CookieNome);
    	if(DoveSiTrovaPrima==-1) {   // se non c'è si taglia corto
    		return true;
    	} else {
    		if( CookiePath &&  CookieDomain)
    			{ CookieScrivi(CookieNome,'cancellato','anni',-1,CookiePath,CookieDomain); }
    		if( CookiePath && !CookieDomain)
    			{ CookieScrivi(CookieNome,'cancellato','anni',-1,CookiePath); }
    		if(!CookiePath &&  CookieDomain)
    			{ CookieScrivi(CookieNome,'cancellato','anni',-1,'',CookieDomain); }
    		if(!CookiePath && !CookieDomain)
    			{ 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
    	} }
    Farmacia di Jarno - le mie pillole: Cookie [#780810], Dom4Php4 [#1123236], Fade [#1139489], getCssProperty [#1152911]
    Inchinatevi difronte al Prof! Nacchio!

    A me pare che l'uomo vada avanti con la retromarcia

  9. #9
    Utente di HTML.it L'avatar di yro
    Registrato dal
    Sep 2003
    Messaggi
    2,916
    visto che non è lucchettara vorrei chiedere una spiegazione...

    ma tutto questo popò di codice, frutto di un encomiabile lavoro è proprio necessario?

    non si può scrivere un cookie con 1 valore in maniere + semplice e sbrigativa? :master:
    E se avessi il dono della profezia e conoscessi tutti i misteri e tutta la scienza, e possedessi la pienezza della fede così da trasportare le montagne, ma non avessi la carità, non sono nulla.

  10. #10
    beh ...sei hai idea di come si possa mantenere un ugual controllo dei cookie con meno codice posta pure ...fai un favore anche a me

    cmq certo che se tutte queste opzioni non ti interessano puoi cancellarle, ma credo con questo codice si controlli molto...
    Farmacia di Jarno - le mie pillole: Cookie [#780810], Dom4Php4 [#1123236], Fade [#1139489], getCssProperty [#1152911]
    Inchinatevi difronte al Prof! Nacchio!

    A me pare che l'uomo vada avanti con la retromarcia

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.