Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    762

    [SESSIONI] Comportamento di session_destroy(). Chiarimenti.

    Buongiorno a tutti,

    ancora una volta mi ritrovo a dover parlare di sessioni. Stavolta però si settano correttamente (a parte qualche eccezione ogni tanto) .

    La questione ruota attorno alla funzione session_destroy().

    Immaginate una pagina di log-in con il tipico: "Se i dati sono corretti, creo la variabile di sessione e ti reindirizzo alla pagina x", così:

    Pagina login.php, proveniente da index.php

    Codice PHP:
    <?php
    session_start
    ();

    if (
    $_POST) {

        if ((
    $_POST['user'] == 'pippo') && ($_POST['password'] == 'pluto')) {

            
    $_SESSION['auth'] = 'autenticato';
            
    header('Location:pagina-riservata.php');
            exit();

        } else {
        
            
    header('Location:index.php');
            exit();
        }

    } else {

        
    header('Location:index.php');
        exit();
    }

    ?>
    Ora, nella pagina riservata, avrò (all'inizio) l'inizializzazione e la verifica della presenza della variabile di sessione creata in autenticazione: se ok -> allora resta; se non ok -> allora index.php e fai il login di nuovo.

    La questione è questa:

    Se alla fine di ogni file di tipo "pagina riservata" includo session_destroy()..E..dopo aver eseguito il login correttamente..E..aver creato la variabile di sessione correttamente..(E..aver controllato che c'è nella pagina riservata..)

    ..al refresh di pagina, con session_destroy() incluso, la variabile viene cancellata...e ritorno all'area di login.



    Ora, la domanda è:

    Il comportamento è corretto? Mi verrebbe da pensare di si dato che session_destroy() destroys all of the data associated with the current session. .

    Oppure è un'anomalia?

    Sopratutto...session_destroy() non serviva ad eliminare la sessione SOLO quando la finestra del browser viene chiusa? ..perchè così, al refresh questa se ne va via..



    Grazie a tutti.


    EDIT: avevo dimenticato "session_start()" qui all'inizio dello script...c'è nelle mie pagine...l'ho dimenticato solo ora qui.

  2. #2
    chiudere il browser e farne un refresh di pagina sono cose diverse.

    se cancelli la sessione è corretto alla pagina dopo ti venga richiesto il login

    non mettere password in chiaro nelle sessioni

    se in ogni caso fai un redirect a index.php non serve metterlo in un if, duplicato
    http://www.trustweb.it - Web Development - Design 2D/3D - SEO & SEM

    Twitter http://twitter.com/#!/TrustWeb
    LinkedIn http://it.linkedin.com/in/trustweb

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    762
    Si si lo so.

    Il discorso è: perchè in giro dicono che session_destroy elimina la sessione alla chiusura del browser quando invece elimina la sessione alla fine del caricamento della pagina stessa, e quindi al refresh non si avrà più la sessione ..??

    PS: l'if duplicato è perchè sto in fissa..

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    session_destroy() viene eseguita dove la metti.
    Viene anche eseguita in automatico alla chiusura del browser.

  5. #5
    In questi casi più che sentire cosa "dicono in giro" è sempre bene leggere il manuale ufficiale

    http://php.net/manual/en/function.session-destroy.php

    session_destroy() destroys all of the data associated with the current session. It does not unset any of the global variables associated with the session, or unset the session cookie. To use the session variables again, session_start() has to be called.
    session_destroy è una funzione che quando viene invocata cancella tutti i dati associati alla sessione.

    Questa funzione puoi lanciarla a tuo piacere quando vuoi, di default, alla chiusura del browser la sessione viene distrutta.
    http://www.trustweb.it - Web Development - Design 2D/3D - SEO & SEM

    Twitter http://twitter.com/#!/TrustWeb
    LinkedIn http://it.linkedin.com/in/trustweb

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    762
    Ecco, e già qui ragioniamo. Però era giusto per evidenziare che NON E' che "va messa in ogni pagina alla fine del codice"...come dicono in molti, moltissimi.


  7. #7
    no assolutamente non devi metterla alla fine di ogni pagina, altrimenti fai una forzatura e vai proprio contro il concetto di sessione
    http://www.trustweb.it - Web Development - Design 2D/3D - SEO & SEM

    Twitter http://twitter.com/#!/TrustWeb
    LinkedIn http://it.linkedin.com/in/trustweb

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    762
    Come infatti faccio da tempo ormai. Occhio alla disinformazione!

  9. #9
    in pratica devi metterla ogni volta che un utente deve fare il logout.
    Quindi sulla pagina del logout o quando fai un controllo che la sessione sia ancora valida.

    Se la metti a fine pagina, ti eliminerà la sessione ogni volta che cambi pagina, portandoti al login.

    Il comportamento è corretto, era il ragionamento che era sbagliato

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    762


    Raga.. ..lo sò.. ..era per chiarirlo una volta per tutte..


    Grandi

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 © 2024 vBulletin Solutions, Inc. All rights reserved.