- Home
- Categorie
- Coding e Sistemistica
- PHP
- [Risolto] Eliminare cookie con più contenuti. Come si fa?
-
[Risolto] Eliminare cookie con più contenuti. Come si fa?
Salve ragazzi,
ho creato un cookie con PHP.
Questo cookie contiene più valori e l'ho creato così:
** setcookie("nomecookie[sesso]", "$sesso", time()+3600, "/");
setcookie("nomecookie[nome]", "$nome", time()+3600, "/"); **Il problema è che non riesco ad eliminarlo!
Come si fa ad eliminare un cookie che ha più contenuti (e che quindi è come se fosse un array)?Se scrivo questo non funziona!
if (IsSet($_COOKIE['nomecookie']))
{
setcookie("nomecookie[sesso]","",time()-3600);
setcookie("nomecookie[nome]","",time()-3600);
}Non voglio svuotarlo, voglio eliminarlo del tutto. Aspetto suggerimenti...
Grazie a tutti
-
Ciao Protone86,
Il php è case sensitive, quindi la funzione IsSet che stai utilizzando non è la funzione isset di php.
Questo già potrebbe essere un problema, in quanto la condizione if(IsSet(...)) se non dà errore, quantomeno non è mai verificata.Ti segnalo anche un altro problema, più che altro una finezza, ma che può creare molti problemi:
La funzione time() restituisce l'ora del server, che però può essere diversa da quella del client (ad esempio per il fuso orario).
Se per eliminare il cookie fai un time()-3600, un utente in un altro fuso orario potrebbe percepire la scadenza addirittura in futuro. Per essere sicuro che il cookie venga eliminato, sottrai 90000, cioè i secondi contenuti in 25 ore, ovvero più della massima differenza tra due fusi orari qualsiasi.Ti suggerisco inoltre, in fase di sviluppo, di abilitare gli errori e i warning di php, modificando i valori di php.ini. Puoi farlo modificando direttamente il php.ini, oppure puoi modificare i singoli valori in locale, con .htaccess, o con la funzione ini_set di php.
Ciao,
Luca Bartoli
-
@lucabartoli said:
Ciao Protone86,
Il php è key sensitive, quindi la funzione IsSet che stai utilizzando non è la funzione isset di php.
Questo già potrebbe essere un problema, in quanto la condizione if(IsSet(...)) se non dà errore, quantomeno non è mai verificata.Ciao, ti ringrazio per la risposta.
Strano, quel IsSet l'ho già usato altre volte scritto così e ha sempre funzionato.
L'ho comunque scritto come da te suggerito ma non cambia nulla al problema.
Ho anche messo 90000...Suggerimenti?
-
Infatti ho scritto io una cavolata:
I nomi delle variabili sono case sensitive, i nomi delle funzioni no.Hai già provato così?
[php]setcookie("nomecookie","",time()-3600);[/php]
-
Non chiedermi perché, ma così funziona:
[php]setcookie("nomecookie[sesso]","",0);[/php]
-
Ho risolto con
setcookie("nomecookie","",time()-3600,"/");
-
L'ho testato in locale e a me funziona.
Non è che per caso ti aspetti di eseguire il setcookie e di vedere subito il cookie rimosso?Perché il cookie non puoi rimuoverlo tu, ma lo fa il browser quando si accorge che un cookie è scaduto. Tu puoi impostare la scadenza, ma ti serve un esecuzione per farlo. Al primo refresh della pagina il browser controlla il cookie e vede che è scaduto, a quel punto lo rimuove.
Per spiegarti cosa intendo prova questo codice:
[php]<?php
if(!isset($_GET['c'])) header( "Location: ".$_SERVER['PHP_SELF']."?c=1" );
echo "<pre>";
//setcookie("prova[1]", "prova", time()+3600);
//setcookie("prova[1]", "", 0);
print_r($_COOKIE);
echo "</pre>";
exit;
?>[/php]
Delle due righe commentate attiva la prima e lancia lo script.
Poi torna sullo script, commenta la prima riga e attiva la seconda, e rilanci lo script (non fare aggiorna, altrimenti ti prende il parametro c e non fa il redirect, lancia lo script scrivendo il nome del file senza appendere alcun parametro get).
-
So bene quello che intendi dire
Ho risolto con
setcookie("nomecookie","",time()-3600,"/");Grazie comunque! Ciao
-
Giusto!
Impostavi il cookie sulla root e poi lo eliminavi dalla cartella corrente...
Non me ne ero accorto, pardon... Oggi sono fuso.Si sono accavallati i post...