• User Attivo

    [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 :gthi:


  • User Attivo

    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


  • User Attivo

    @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?


  • User Attivo

    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]


  • User Attivo

    Non chiedermi perché, ma così funziona:
    [php]setcookie("nomecookie[sesso]","",0);[/php]


  • User Attivo

    Ho risolto con
    setcookie("nomecookie","",time()-3600,"/");


  • User Attivo

    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).


  • User Attivo

    So bene quello che intendi dire 😄

    Ho risolto con
    setcookie("nomecookie","",time()-3600,"/");

    Grazie comunque! Ciao :gthi:


  • User Attivo

    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... 🙂