Visualizzazione risultati 1 fino 21 di 21

Discussione: problemi con cookie

  1. #1
    Guest

    Unhappy problemi con cookie

    Buongiorno a tutti,
    ho un problema con i cookie: riesco a creare il cookie che mi serve senza problemi ma quando cerco di sovrascriverlo il cookie mi si cancella! Se poi lo sovrascrivo ancora si riscrive e così via dicendo... In pratica continua a fare: scrivi, cancella, scrivi, cancella... Da cosa può dipendere?
    Non capisco come mai perché offline sul mio computer funziona tutto come dovrebbe...

  2. #2
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    in che senso si cancella?

    la cancellazione è dovuta o al fatto che richiami setcookie(nome cookie)
    o che richiami setcookie(nome cookie, tempo negativo)

    quindi ad esempio senon aggiorni la variabile relativa al tempo può essere che la vede come negativa e quindi cancella.

    magari posta il codice interessato.
    ciao
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

  3. #3
    Guest

    Predefinito

    Vuoi dire che una volta che faccio il setcookie(nome_cookie) e poi lo rifaccio la seconda volta, magari con valori diversi, il secondo non sovrascrive il primo ma lo cancella?
    Nel primo file con il form è presente questa parte di codice nella sezione head (qui non setto nessun cookie):
    Codice PHP:
    if($_COOKIE["css"]!=",,"){
    if(
    $_COOKIE["css"]!=""){
    $css=explode(",",$_COOKIE["css"]);
    echo
    "<style type=\"text/css\">\n";
    if(
    $css[0]!=""){
    if(
    $css[1]!=""){
    echo
    "body {\n background-color : $css[0];\n font-family : \"$css[1]\";\n}\n";
    } else {
    echo
    "body {\n background-color : $css[0];\n}\n";
    }
    } elseif(
    $css[1]!=""){
    echo
    "body {\n font-family : \"$css[1]\";\n}\n";
    }
    if(
    $css[2]!=""){
    echo
    "div#contenitore {\n background-color : $css[2];\n}\n";
    }
    echo
    "</style>\n";
    }
    }
    Nel secondo file, è presente quest'altra parte di codice all'inizio (qui setto il cookie):
    Codice PHP:
    if($_POST[body_background]||$_POST[body_font]||$_POST[contenitore_background]!=""){
    $css[0]=$_POST[body_background];
    $css[1]=$_POST[body_font];
    $css[2]=$_POST[contenitore_background];
    } else {
    $css[0]="";
    $css[1]="";
    $css[2]="";
    }
    $impl_css=implode(",",$css);
    setcookie("css","$impl_css",time() + 30000000);
    $css=explode(",",$_COOKIE["css"]);
    seguita dal primo codice sempre nella sezione head.
    Quindi prima di risettare il cookie devo cancellarlo per poi sovrascriverlo? Perché con LAMP sul mio computer funziona?

  4. #4
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    Citazione Originalmente inviato da paolovalcepina Visualizza messaggio

    setcookie("css",$impl_css,time() + 30000000);

    [/PHP]
    seguita dal primo codice sempre nella sezione head.
    Quindi prima di risettare il cookie devo cancellarlo per poi sovrascriverlo? Perché con LAMP sul mio computer funziona?
    Intanto togli i doppi apici da :$impl_css
    poi dovresti fare un semplice controllo:

    1. se il cookie esiste leggi il valore del cookie e non fai null'altro
    2. se il cookie non esiste lo crei e lo setti con il valore che gli passi

    ovviamente funzionera in questo modo:

    inizialmente il cookie non esisera quindi verrà selezionato il punto 2
    dopo il punto due fin quando il cookie non scade verrà richiamato il punto 1 per leggere la configurazione

    nel caso il cookie deve essere modificato prima, e solo in questo caso inserisci una variabile alternativa e controlli che se esiste questa variabile deve resettare il cookie con la nuova configurazione, ma ovviamente il passo successivo sarà nuovamente il punto 1

    Poi non sò se il tuo codice ha qualche esigenza particolare, comunque sia, considera che se entra nel ramo else (succedera quanndo non farai la chiamata post), quindi in genere la seconda volta che chiami la tua pagina senza passargli le variabili post, questo setterà il valore del cookie a null (o vuoto), quindi in $impl_css non ci sarà nulla e quindi in $_COOKIE neppure.

    bye
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

  5. #5
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Vorrei solo far notare che se setti un cookie tramite set_cookie lo troverai in $_COOKIE solo nell'esecuzione successiva.


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  6. #6
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    Citazione Originalmente inviato da saitfainder Visualizza messaggio
    Vorrei solo far notare che se setti un cookie tramite set_cookie lo troverai in $_COOKIE solo nell'esecuzione successiva.

    azz lo avevo dimenticato..

    @paolovalcepina: detto questo il problema è risolto!
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

  7. #7
    Guest

    Predefinito

    Niente da fare... Ho modificato i file e continua a funzionarmi solo offline. Online c'è sempre lo stesso problema:
    prima chiamo la pagina che contiene questo codice, dove leggo il valore del cookie, se impostato:
    Codice PHP:
    if($_COOKIE["css"]!=",,"){
    if(
    $_COOKIE["css"]!=""){
    $css=explode(",",$_COOKIE["css"]);
    echo
    "<style type=\"text/css\">\n";
    if(
    $css[0]!=""){
    if(
    $css[1]!=""){
    echo
    "body {\n background-color : $css[0];\n font-family : \"$css[1]\";\n}\n";
    } else {
    echo
    "body {\n background-color : $css[0];\n}\n";
    }
    } elseif(
    $css[1]!=""){
    echo
    "body {\n font-family : \"$css[1]\";\n}\n";
    }
    if(
    $css[2]!=""){
    echo
    "div#contenitore {\n background-color : $css[2];\n}\n";
    }
    echo
    "</style>\n";
    }
    }
    Il cookie lo crea e lo mantiene regolarmente nelle altre pagine, ma quando ricompilo il form mi si cancella.
    Da quando lo compilo è presente questo codice:
    Codice PHP:
    if($_COOKIE["css"]==""){
    if(
    $_POST[body_background]||$_POST[body_font]||$_POST[contenitore_background]!=""){
    $css[0]=$_POST[body_background];
    $css[1]=$_POST[body_font];
    $css[2]=$_POST[contenitore_background];
    }
    $impl_css=implode(",",$css);
    setcookie("css", $impl_css, time() + 30000000);
    } else {
    if(
    $_POST[body_background]||$_POST[body_font]||$_POST[contenitore_background]!=""){
    $controllo=1;
    $css[0]=$_POST[body_background];
    $css[1]=$_POST[body_font];
    $css[2]=$_POST[contenitore_background];
    }
    if(
    $controllo==1){
    $impl_css=implode(",",$css);
    setcookie("css", $impl_css, time() + 30000000);
    $controllo=0;
    }
    }
    e poi quello precedente.
    La cosa che continua a lasciarmi perplesso è perché gira sul computer e una volta pubblicato mi fa questo scherzo

  8. #8
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    prova a mettere come quarto parametro di set_cookie il path a cui associare il cookie -> "/"

    continua a considerare che se fai set_cookie non ti aspettare che senza aggiornare la pagina avrai già il nuovo valore settato prelevabile dal cookie.
    quindi appena lo setti, il valore del cookie letto subito dopo con $_COOKIE[nome], sarà quello attuale e non quello nuovo che hai pcoo prima settato.

    ciao

    edito:
    me ne accorgo solo ora, scusa ma come scrivi le espressioni di controllo?

    quella è una sintassii sbagliata!!

    devi usare qualcosa del tipo:

    if(x==val1 || y!=val2 && z <= val3 etc etc...

    che poi è la sintassi comune a quasi tutti i linguaggi di programmazione ad alto livello

    ps. se usano una forma di pipe particolare io ancora non ne sono a conoscenza, comunque:
    http://www.google.it/search?hl=it&q=...meta=&aq=f&oq=

    ti conviene!
    bye
    Ultima modifica di Xsescott : 05-02-2010 alle ore 17.19.46
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

  9. #9
    Guest

    Predefinito

    Xescott, io non vedo strutture di controllo scritte male in quel codice

  10. #10
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    Citazione Originalmente inviato da alessandro1997 Visualizza messaggio
    Xescott, io non vedo strutture di controllo scritte male in quel codice
    In quella forma io sò che bisogna usare almeno isset() per verificare che esista,
    altrimenti perchè ha usato due forme diverse per fare i controlli?

    $_POST[x] || $_POST[y] != ""

    cioè sono due controlli diversi o intendeva verificare che in entrambi vi era qualcosa?

    e if($_POST[x]) cosa verifica precisamente?
    ritorna true solo se esiste anche se non è settata? è questo che fa?

    se effettivamente voleva far ciò, mi son sbagliato!
    Ultima modifica di Xsescott : 05-02-2010 alle ore 18.08.20
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

  11. #11
    Guest

    Predefinito

    if($_POST['x']) restituisce true nel caso la variabile sia stata settata con un valore qualsiasi diverso da false o da 0.

  12. #12
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    Citazione Originalmente inviato da alessandro1997 Visualizza messaggio
    if($_POST['x']) restituisce true nel caso la variabile sia stata settata con un valore qualsiasi diverso da false o da 0.
    Capito :)
    comunque se il valore è un valore vuoto "" ritorna anche false!
    comunque, non capisco questa sua scelta di quell'ultimo controllo implementato in modo diverso.

    a questo punto:
    tra
    if($_POST['x']) e if($_POST['x'] != "") e if(isset($_POST['x']))

    cosa cambia?
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

  13. #13
    Guest

    Predefinito

    La funzione isset($_POST['x']) restituisce true anche se la variabile è false, null o 0. Controlla solo se la variabile è settata, il valore non influisce.

  14. #14
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    Citazione Originalmente inviato da alessandro1997 Visualizza messaggio
    La funzione isset($_POST['x']) restituisce true anche se la variabile è false, null o 0. Controlla solo se la variabile è settata, il valore non influisce.
    grazie per i chiarimenti!

    edit:
    a me piace verificare ciò che mi si dice :D e viusto che sei stato cosi gentile e preciso nelle risposte volevo solo segnalare un piccolo errorino:
    se fai null è come se facessi unset(), quindi la variabile non risulta settata quindi restituisce false :)
    ciao
    Ultima modifica di Xsescott : 05-02-2010 alle ore 22.20.36
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

  15. #15
    Guest

    Predefinito

    Ciao a tutti e grazie per i chiarimenti. Purtroppo però non ne vengo ancora a capo...
    Ho semplificato tutto al massimo (anche in questo caso offline funziona tutto regolarmente) e quindi mi è rimasta la pagina (n°1) con il form con incluso prima del form questo:
    Codice PHP:
    if($_COOKIE["css"]!=",,"){
    if(
    $_COOKIE["css"]!=""){
    $css=explode(",",$_COOKIE["css"]);
    echo
    "<style type=\"text/css\">\n";
    if(
    $css[0]!=""){
    if(
    $css[1]!=""){
    echo
    "body {\n background-color : $css[0];\n font-family : \"$css[1]\";\n}\n";
    } else {
    echo
    "body {\n background-color : $css[0];\n}\n";
    }
    } elseif(
    $css[1]!=""){
    echo
    "body {\n font-family : \"$css[1]\";\n}\n";
    }
    if(
    $css[2]!=""){
    echo
    "div#contenitore {\n background-color : $css[2];\n}\n";
    }
    echo
    "</style>\n";
    }
    }
    Un'altra pagina (n°2) (nella quale non mi aspetto che l'effetto del cookie aggiornato sia visibile) con questo:
    Codice PHP:
    $css[0]=$_POST[body_background];
    $css[1]=$_POST[body_font];
    $css[2]=$_POST[contenitore_background];
    $impl_css=implode(",",$css);
    setcookie("css", $impl_css, time() + 30000000);
    e poi di nuovo il codice sopra. Il problema è:
    - vado nella pagina n°1, compilo il form regolarmente, e do l'ok.
    - il form mi manda nella pagina n°2, e mi crea il cookie come dovrebbe.
    - ritorno alla pagina n°1 e il cookie ha avuto effetto.
    Da qui iniziano i guai...
    - ricompilo il form regolarmente e do l'ok.
    - il form mi manda nella pagina n°2 e TUTTI i cookie mi si cancellano, compresi anche quelli di codesnippet.altervista.org forum.it.altervista.org it.altervista.org .
    - quando ritorno nella pagina n°1 non esiste più nessun cookie.
    - se poi ricompilo di nuovo il form il cookie si ricrea normalmente e ricomincio il ciclo dall'inizio.
    Cosa c'è di sbagliato ora che il codice è ridotto all'osso?

  16. #16
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    per la cancellazione potrebbe essere un conflitto con altervista, il tuo è un dominio di terzo livello che fa parte del dominio di secondo livello di altervista, se non setti il dominio lui assume che tu stia lavorando su i cookie di tutto il dominio, quindi cancella tutto(suppongo)
    prova a vedere se cosi cancella che gli altri cookie:

    setcookie("css", $impl_css, time() + 30000000,'/','tuonick.altervisa.org');

    edit:
    prova a vedere cosa stampa anche $impl_css di volta in volta, insomma fai un pò di debug!
    Ultima modifica di Xsescott : 06-02-2010 alle ore 17.39.20
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

  17. #17
    L'avatar di mycarlo
    mycarlo non è connesso Utente attivo
    Data registrazione
    06-10-2009
    Residenza
    $this->s50
    Messaggi
    467

    Predefinito

    Citazione Originalmente inviato da alessandro1997 Visualizza messaggio
    La funzione isset($_POST['x']) restituisce true anche se la variabile è false, null o 0. Controlla solo se la variabile è settata, il valore non influisce.
    No, isset restituisce false se la variabile è null.
    Mentre array_key_exists restituisce true.

    Citazione Originalmente inviato da php
    isset() does not return TRUE for array keys that correspond to a NULL value, while array_key_exists() does.
    Codice PHP:
    <?php
    $search_array
    = array('first' => null, 'second' => 4);

    // returns false
    isset($search_array['first']);

    // returns true
    array_key_exists('first', $search_array);
    ?>

  18. #18
    Guest

    Predefinito

    Ciao a tutti, grazie Xsescott. Ora non si cancellano più tutti i cookie, però quello che mi interessa continua a fare i capricci... (e ovviamente continua a funzionare offline)
    Ho provato a guardare come si comportano le diverse variabili ed è tutto regolare:
    -pagina 1: tutte le variabili sono vuote.
    -compilo il form (valori di prova: "q", "w", "e") e do l'ok (che mi manda a pagina 2):
    -i vari $_POST['x'] sono corretti;
    -$impl_css="q,w,e";
    -il cookie creato è: q%2Cw%2Ce (corrispondente a q,w,e);
    -torno alla pagina iniziale:
    -i vari $_POST['x'] sono vuoti;
    -$impl_css="q,w,e";
    -$_COOKIE["css]="q,w,e";
    -il cookie creato è come prima;
    -ripeto il primo passaggio: compilo il form (valori di prova: "a", "b", "c") e do l'ok:
    -il cookie scompare
    -$impl_css="q,w,e"; /*rimane come prima*/
    -echo $css; /*mi dà Array*/
    -se ritorno a pagina 1 non si visualizza niente e il cookie non c'è.
    -se aggiorno pagina 2:
    -il cookie riappare con i nuovi valori;
    -$impl_css="a,b,c"; /*si aggiorna correttamente*/
    -echo $css; /*mi dà Array*/
    -se ora ritorno a pagina 1 gli aggiornamenti sono stati effettuati.
    Ora, il cookie dovrebbe visualizzarsi da pagina 2 (visto che il form è a pagina 1) e avere effetto quando torno a pagina 1 (come del resto fa la prima volta che compilo il form). Come mai la seconda volta cambia???
    E perché con LAMP continua a funzionare

  19. #19
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    Il fatto che quando richiami setcookie su un cookie gia esistente elimini quel cookie anche se in memoria credo venga salvato il valori per darti la possibilità durante l'eliminazione di poterlo leggere(credo ma non sono sicuro), solo che poi quando aggiorni la pagina dovrebbe inviarti il nuovo cookie con i nuovi valori all'interno.mah!

    Sinceramente non sò come funzioni di preciso, però:
    - hai provato a far stampare i valori aggiornando la stessa pagina 2 invece di tornare a pagina 1, e poi la pagina 1 sei sicuro di aggiornarla?
    -non è che preleva quella in cache?
    -lo scorrimento tra le pagine lo fai tramite link o tramite i comandi del broswer next - back? usi stesso broswer per locale e remoto?
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

  20. #20
    Guest

    Predefinito

    Ciao, mah... è un mistero! Forse mi conviene lasciar perdere e rifare tutto daccapo fra un po' (magari in un altro modo che mi verrà in mente).
    -Se aggiorno pagina 2, i cookie si aggiornano.
    -Da una pagina all'altra mi muovo sempre tramite link, compreso quando torno da pagina 2 a pagina 1. La pagina si aggiorna, tant'è che tutti i valori stampati cambiano, o meglio, si cancellano.
    -Il browser che uso è lo stesso sia in locale che in remoto. Uso Mozilla Firefox, versione 3.5.7 su Ubuntu 9.10. Finora non ho mai avuto problemi di questo tipo. Ho anche creato un sito di gestione spese per un gruppo d'acquisto solidale, che dovrebbe essere anche più complicato, eppure non ho avuto nessun problema . Anche lì uso i cookie, li aggiorno, li cancello per poter ordinare i prodotti; si possono modificare, eliminare, ecc... però i cookie funzionano. Ho anche provato a confrontare i due metodi, ma non riesco a trovare cosa c'è che ho cambiato e che sbaglio.....
    Boh, è meglio dormirci sopra... chissà che fra un po' mi verrà qualche idea !
    Intanto grazie a tutti quelli che mi hanno scritto e dato consigli!!!
    Ciao ciao
    Paolo

  21. #21
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    scusa la cosa è assai intrigante, posta la parte che recupera il valore sia per pagina uno che per pagina due.
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •