Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    133

    Problema con setcookie()

    Salve a tutti. Ho un sito con una pagina index.php in cui effettuare il log-in, una pagina redirect_login.php che controlla i dati inseriti per il log-in, salva le variabili di sessione richieste e crea il cookie, e una pagina redirect_logout.php che cancella la sessione corrente e "dovrebbe" cancellarmi il cookie.
    Utilizzo il cookie, come molti di voi avranno capito, per rendere l'accesso automatico in caso di accessi precedenti, nel caso in cui si voglia (come in molti forum o cose simili, compreso questo ). Ho però un problema: non riesco a cancellare il cookie.
    Cercherò di spiegare passo passo: la mia pagina index.php è generata dal php e stampa o l'area di log-in, oppure, in caso di accesso autorizzato dopo il login, l'homepage.
    L'area redirect_login.php effettua il controllo con il DB e setta il cookie :
    Codice PHP:
        $nickname $_POST['nickname'];
        
    $password $_POST['password'];
        
        
    $query_auth "SELECT * FROM utenti WHERE nickname = '$nickname' AND password = '$password'";
        
    $ris_auth mysql_query($query_auth,$conn) or die ("Errore nella query: " .mysql_error());
        
    $utente mysql_fetch_array($ris_auth);
        
        if(
    is_array($utente)){
            
    $msg "Accesso in corso. Attendere prego.";
            
    //salvo tutti i dati nelle variabili di sessione
            
    $_SESSION['nome'] = $utente[nome];
            
    $_SESSION['cognome'] = $utente[cognome];
            
    $_SESSION['nickname'] = $utente[nickname];
            
    $_SESSION['uid'] = $utente[id];
            
    $_SESSION['email'] = $utente[email];
            
    $_SESSION['telefono'] = $utente[telefono];
            if(
    $_POST['ricorda'] == "ricordami")
                
    setcookie("login","$utente[id]",time()+60*60);
        }    
        else 
    $msg "Nickname o password errati. Attendere prego."
    A questo punto, se i dati sono corretti, index.php stamperà l'homepage e tutto il resto. Notare $_POST['ricorda']: è una checkbox classica in cui si dice "ricordami ogni volta che mi connetto". Se è stata checkata, il cookie "login" sarà settato per un'ora, così, nel caso in cui l'utente si ricolleghi, l'accesso verrà effettuato automaticamente dall'index.php, con questo codice:
    Codice PHP:
        if(isset($_COOKIE['login'])){
                
    $query_auth "SELECT * FROM utenti WHERE id = '" .$_COOKIE['login'] ."'";
                
    $ris_auth mysql_query($query_auth,$conn) or die ("Errore nella query: " .mysql_error());
                
    $utente mysql_fetch_array($ris_auth);
        
            if(
    is_array($utente)){
                
    //salvo tutti i dati nelle variabili di sessione
                
    $_SESSION['nome'] = $utente[nome];
                
    $_SESSION['cognome'] = $utente[cognome];
                
    $_SESSION['nickname'] = $utente[nickname];
                
    $_SESSION['uid'] = $utente[id];
                
    $_SESSION['email'] = $utente[email];
                
    $_SESSION['telefono'] = $utente[telefono];
            }    
        } 
    A questo punto, quando effettuo il logout, oltre a cancellare la sessione corrente, vorrei cancellare anche il cookie, ma non riesco. Il codice del redirect_logout.php è semplicemente questo:
    Codice PHP:
                print "Arrivederci " .$_SESSION['nickname'] ."!

                         Disconnessione in corso, attendere prego."
    ;
                if(isset(
    $_COOKIE['login'])){
                    
    setcookie("login",$_SESSION['uid'],time()-3600);
                }
                
    session_unset(); 
    solo che, invece di cancellare il cookie, mi da quest'errore:

    Warning: Cannot modify header information - headers already sent by (output started at C:\...\redirect_logout.php:12) in C:\...\redirect_logout.php on line 31

    cosa sbaglio? Grazie

  2. #2
    setcookie va invocato prima che venga effettuato qualsiasi output, altrimenti da questo errore.
    Se tu stampi a video una frase, implicitamente invii un header, quindi non puoi più usare una serie di funzioni (header, setcookie, session, ecc...)

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    133
    grazie mille!!

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.