Visualizzazione risultati 1 fino 3 di 3

Discussione: $_SESSION e problema logout

  1. #1
    Guest

    Predefinito $_SESSION e problema logout

    Ciao a tutti,
    ho un problema che non riesco a risolvere riguardo il logout dell'utente.

    Vi spiego meglio come funziona lo script:

    Il form per il login si trova in home, ed ha per action la stessa pagina, la quale sara' diversa se il visitatore e' loggato o meno.

    Per fare questo, all' inizio della pagina controllo i dati ricevuti tramite $_POST, ed a seconda dei casi assegno differenti valori alla variabile $error.

    Solo se il login e' avvenuto correttamente, creo delle variabili in $_SESSION, con i dati dell'utente, quindi se uno giunge sulla pagina per la prima volta, queste variabili non esistono.

    Codice PHP:
    <?php

    session_start
    ();


    require
    'config.php';
    require
    'connect.php';


    $mail = htmlentities($_POST[email]);
    $pwd = htmlentities($_POST[pwd]);

    $error = 'empty';

    if((
    $mail) && ($pwd == "")) {
    $error = 'no_pwd';
    }

    elseif((
    $pwd) && ($mail == "")) {
    $error = 'no_mail';
    }

    elseif((
    $mail) && ($pwd)) { // Solo se ci sono entrambi i dati, prelevo la mail dal DB

    $log_query = "SELECT * FROM `users` WHERE `mail` = " . "'" . $mail . "'";
    $log_data = mysql_query($log_query, $link);
    $n = mysql_num_rows($log_data);

    if(
    $n == 0) { // Se non ci sono risultati, la mail e' errata
    $error = 'mail_err';
    }

    else {
    // altrimenti prelevo il resto dei dati

    $data = mysql_fetch_row($log_data);
    $uid = $data[0];
    $status = $data[1];
    $key = $data[2];
    $user = $data[4];
    $user_pwd = $data[5];


    if(
    $status == 0) { // Account non ancora attivato
    $error = 'no_act';
    }

    elseif(
    $status == 1) { // Controllo la password, che nel DB e' criptata con md5

    $pwd = md5($pwd);

    if((
    $user_pwd == $pwd)) { // Se la password e' corretta, creo le variabili

    $error = 'none';

    $_SESSION['key'] = $key;
    $_SESSION['mail'] = $mail;
    $_SESSION['pwd'] = $pwd;
    $_SESSION['user'] = $user;

    }

    else {

    $error = 'pwd_err';

    }

    }

    }

    }



    require
    'header.php';

    ?>

    Per controllare se un utente e' loggato o meno, controllo il contenuto delle variabili. Se sono vuote, non e' loggato.

    Per effettuare il logout rimando alla stessa pagina, con la query string

    Codice PHP:
    ?action=logout
    e per effettuare il logout uso questo script

    Codice PHP:
    if($_GET['action'] == 'logout') {


    $_SESSION = array();

    session_destroy();


    header("location: http://www.threads.altervista.org/versione?msg=Logout avvenuto con successo");


    }
    Quando vengo rimandato alla home, effettivamente sono sloggato, ma se cambio sito e vi ritorno, o semplicemente se clicco sul sito dalla barra dei preferiti, sono di nuovo dentro e $_SESSION ha ancora tutti i suoi valori.

    Ho provato anche mettendo session_unset, settando il time del cookie a -42000, ma nulla; stesso problema.

    Qualche buon' anima?
    Ultima modifica di threads : 05-05-2013 alle ore 12.35.55

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,432

    Predefinito

    Non è che i segnalibri hanno memorizzati anche i parametri $_POST[email] e $_POST[pwd], quindi ogni volta rifai il login?

    (invece della htmlentities, userei la mysql_real_escape_string()).

    Ciao!
    Ultima modifica di alemoppo : 05-05-2013 alle ore 14.14.34

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Non è che i segnalibri hanno memorizzati anche i parametri $_POST[email] e $_POST[pwd], quindi ogni volta rifai il login?

    (invece della htmlentities, userei la mysql_real_escape_string()).

    Ciao!
    Era venuto il dubbio anche a me, ma il segnalibro l'avevo messo prima di srivere lo script, e non so se possa aver preso i parametri dopo, inoltre risulto loggato anche scrivendo direttamente l'indirizzo nella barra.
    Pero' mi sono accorto che con Explorer il logout funziona, mentre con chrome e firefox no. Io ero abituato a differenze tra browser con i CSS, ora pure il PHP no, per favore!

    Comunque grazie per il consiglio sul mysql_real_escape_string

Regole di scrittura

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