Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    cookie a volte funziona a volte no

    ciao a tutti, tempo fa feci questo script che servirebbe a contare le visualizzazioni di una pagina(con un determinato id, tipo il visualizzatore di youtube sui video), solo che ho voluto fare qualcosa di più complicato di una semplice variabile che si incrementa ogni volta che viene aggiornata la pagina, e quindi ho usato i cookie(e se non accettati dall'utente, le sessioni) per vedere se l'utente avesse già visitato quella pagina(se si: non incrementa, se no: incrementa). Il problema è che non so perché una volta utilizza i cookie e una volta le sessioni. Vi mostro il codice così si capisce meglio:
    codice:
            if(!isset($_COOKIE['prova']))
            {
                setcookie('prova',"test",(time()+500000)); //verifico se l'utente accetta i cookie
            }
            if(!isset($_COOKIE['prova'])) //se non accetta i cookie
            {
                if(!empty($_SESSION['views']) || isset($_SESSION['views']))
                {
                    $sep = "|";
                    $varray = explode($sep, $_SESSION['views']);
                    foreach($varray as $v)
                    {
                        if($v != $text) {
                            $visited = 0;
                        } else {
                            $visited = 1; //ha già visitato la pagina.
                            break;
                        }
                    }
                    if($visited == 0) //se non ha ancora visitato la pagina
                    {
                        $views++;
                        $obj2->update_thread($text,'views',$views);
                        $_SESSION['views'] = $text .$sep .$_SESSION['views'];
                    }
                    else if($visited == 1) //se ha già visitato la pagina
                    {
                        if($text != $varray[0]) 
                        {
                            $_SESSION['views'] = $text .$sep .$_SESSION['views']; 
                        }
                    }
                } 
                else 
                { 
                    $_SESSION['views'] = $text;                     
                    $views++;
                    $obj2->update_thread($text,'views',$views);
                }
                echo $_SESSION['views'];
                echo '<br><span style="color: red"> '.$views .'</span>';
                echo '<br><span style="color: blue">sessione</span>';
                exit;
            } 
            else //se accetta i cookie
            {
                setcookie ('prova', '', (time()-50000)); //ELIMINAZIONE cookie
                if(empty($_COOKIE['views']) || !isset($_COOKIE['views']))
                {
                    setcookie('views', $text, (time()+86400));
                    $views++;
                    $obj2->update_thread($text,'views',$views);
                }
                else 
                {
                    $sep = "|";
                    $varray = explode($sep, $_COOKIE['views']);
                    foreach($varray as $v)
                    {
                        if($v != $text) {
                            $visited = 0;
                        } else {
                            $visited = 1;
                            break;
                        }
                    }
                    if($visited == 0)
                    {
                        $views++;
                        $obj2->update_thread($text,'views',$views);
                        $_COOKIE['views'] = $text .$sep .$_COOKIE['views'];
                    }
                    else if($visited == 1)
                    {
                        if($text != $varray[0]) {
                            $_COOKIE['views'] = $text .$sep .$_COOKIE['views']; }
                    }
                } 
                echo $_COOKIE['views'];
                echo '<br><span style="color: red"> '.$views .'</span>';
                echo '<br><span style="color: blue">cookie</span>';
                exit;
            
            }
    per vedere una pagina di prova: http://youtoobob.it/thread.php?t=10
    come vedrete ogni volta che refreshate cambia da cookie in sessione e da sessione a cookie. Non riesco a venirne a capo, spero in un vostro aiuto. Grazie
    Ultima modifica di AlexDev; 03-09-2014 a 13:09 Motivo: aggiunte righe di commento

  2. #2
    Codice PHP:
    if(!isset($_COOKIE['prova']))
    {
        
    setcookie('prova',"test",(time()+500000)); //verifico se l'utente accetta i cookie
    }
    if(!isset(
    $_COOKIE['prova'])) //se non accetta i cookie
    {
    ... 

    Due condizioni identiche?
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    si in effetti non ha senso mettere la prima condizione, ma l'errore non è quello. L'ho usato più che altro per non risettare il cookie che magari era già settato

  4. #4
    Quote Originariamente inviata da AlexDev Visualizza il messaggio
    si in effetti non ha senso mettere la prima condizione, ma l'errore non è quello. L'ho usato più che altro per non risettare il cookie che magari era già settato
    A parte che se il codice inizia con quell'obbrobrio non oso immaginare il resto, ma poi a me il problema sembra proprio nei controlli dato che se non è settato il cookie lo setti ma poi entri anche nel ramo della sessione e se non è settata setti anche quella!!!
    Ti consiglio di dare una sistemata a tutti quegli if che così com'è non si capisce nulla!
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    ma appunto, io provo a settare il cookie, se poi il browser non li accetta la variabile $_COOKIE['prova'] non sarà mai settata e quindi dovrà usare le sessioni, la cosa che non capisco e che mi risulta strana è il perché una volta entra nella prima condizione (e di conseguenza usa le sessioni) e una volta entra nella seconda condizione (e di conseguenza usa i cookie).
    IMMAGINATELO COSì lo script:
    codice:
    setcookie('prova',"test",(time()+500000));
    if(!isset($_COOKIE['prova']))
    {
         //usa le sessioni
    } 
    else 
    {
        setcookie ('prova', NULL, (time()-50000)); //ELIMINAZIONE cookie
        //usa i cookie
    
    
    }
    Ultima modifica di AlexDev; 03-09-2014 a 13:59

  6. #6
    Se leggessi il manuale ti renderesti conto che questo controllo è errato:

    Codice PHP:
    setcookie('prova',"test",(time()+500000));
    if(!isset(
    $_COOKIE['prova']))
    {
    ... 

    dato che il cookie inserito sarà visibile solamente al successivo caricamento della pagina!

    setcookie()

    da manuale:

    codice:
    Once the cookies have been set, they can be accessed on the next page load...
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  7. #7
    Non ci avevo minimamente pensato. Scusa per la mia ignoranza in materia, devo fare ancora molta esperienza con PHP e Grazie per il tuo aiuto, penso che ora riuscirò a sistemare il codice

  8. #8
    Rivedi i controlli tenendo presente questa cosa.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

Tag per questa discussione

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.