• User Attivo

    Problema con COOKIE

    Salve a tutti ... sto sbattendo la testa su un pezzo di codice in cui devo risettare un cookie ... ma non capisco perchè, il cookie non me lo setta !!!

    La pagina serve a settarsi un proprio avatar ... anzichè fare una query per visualizzarsi l'avatar appena settato, glielo vorrei mostrare attraverso il cookie:

    [PHP]
    if ($_GET['imposta'] != '') {
    $sql= "UPDATE mp_login set avatar = '$_GET[imposta]' WHERE nick = '$username'";
    @mysql_query ($sql);
    setcookie("FG['avatar']", $_GET[imposta], time() + 129600, "/");
    echo ('<script language="javascript">
    top.location.href = "setta_avatar.php?impostato";
    </script>');
    exit;
    }
    [/PHP]

    Lo script apparentemente è corretto infatti un "primo giro" lo fa ... tutti gli altri invece non vengono settati .. come se non riuscisse a sovrascrivere, per intenderci.

    Anche se al posto di $_GET[imposta] metto "ciao" la musica non cambia.

    Premetto che sullo stesso sito faccio uso di COOKIE correttamente e senza nessun problema.
    Cosa puo essere?


  • Super User

    i cookie vengono settati dall'header della pagina, sei sicuro di non fare un output prima del comando che li setta?


  • User Attivo

    @Tymba said:

    i cookie vengono settati dall'header della pagina, sei sicuro di non fare un output prima del comando che li setta?

    no, non sono affatto sicuro ...
    quindi puo darsi sia per quello?

    grazie, domani provo


  • Super User

    se fai un output prima del comando setcookie è sicuramente per quello 🙂


  • User Attivo

    Niente, il problema rimane .. a dire il vero tutto il sistema basato sui cookie inspiegabilmente non funziona piu ... o anzi .. funziona malissimo ... e non capisco perchè !!!

    Questo è un pezzo dello script di login che rilascia il cookies

    [PHP]

    $username = $_POST['nick']; // Piglia l'input nick dal form
    $password = $_POST['password']; // Come sopra

    $query = "SELECT * FROM $tbl WHERE nick = '$username' AND password = '$password' AND (status = 'a' OR status = 'b')";
    $result = mysql_query($query, $db);
    $row = mysql_fetch_array($result);
    if(mysql_num_rows($result)) { // Se l'user e pwd sono corretti fai quanto segue;

    // Scrivi il Cookie 
    setcookie("FG[username]", $username, time() + 129600, "/");        // Cookie di 36h 
    setcookie("FG[password]", $password, time() + 129600, "/");    // Sets the cookie password 
    setcookie("FG[avatar]", $row[avatar], time() + 129600, "/");    // Sets the cookie password 
    

    ...
    [CUT]
    [/PHP]

    Questo è il pezzo per il logout:

    [PHP]
    <?php
    if(!isset($_GET[msg])) {
    setcookie("FG[username]", '', time() - 2592000); // Sets the cookie username
    setcookie("FG[password]", '', time() - 2592000); // Sets the cookie password
    setcookie("FG[avatar]", '', time() - 2592000); // Sets the cookie password
    header('Location: logout.php?msg=ok');
    exit;
    }
    ?>[/PHP]

    Il logout sembra andare a buon fine, ma nella realtà dei fatti il cookie non lo distrugge e non ho la piu pallida idea del perchè.
    :arrabbiato:


  • User Attivo

    Il problema è ben diverso da quello da me segnalato ... non so ancora quale ... ma forse quello script è giusto .. sono altre cose che non vanno


  • Super User

    una delle cose che non vanno sono proprio i cookie.

    con il blocco di questi da parte dei nuovi browser l'uso dei cookie è altamente sconsigliato

    molto meglio l'uso delle sessioni.


  • User Attivo

    @Tymba said:

    una delle cose che non vanno sono proprio i cookie.

    con il blocco di questi da parte dei nuovi browser l'uso dei cookie è altamente sconsigliato

    molto meglio l'uso delle sessioni.

    ma la sessione mi scade troppo presto

    lo so che impostandola sul php.ini posso allungare il lifetime .... ma su server ad alto traffico è molto sconsigliato.


  • User Attivo

    I cookie sono fatti apposta a quello che serve te, mantenere le informazioni per tanto tempo.
    Cmq credo che il tuo problema sia che imposti il domain con il setcookie.
    Hai provato a togliere il parametro "/" che metti in ogni setcookie.
    Forse è quello che infastidisce i browser.
    Tutti i browser lasciano memorizzare i cookie locali, mentre danno molti problemi sui cookie impostati fuori dominio.

    Inoltre... ho visto che salvi la password, se è quello che penso io, è meglio che quel valore lo memorizzi in modo criptato oppure usando SHA1 / MD5.
    I cookie si posso leggere, sono come dei file di testo.