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] Mantenere lo stato...oppure no?

    Ciao raga,

    premesso che non sono un esperto sull'argomento però non capisco una cosa. Nel mio caso ho 3 pagine che vi espongo qui sotto.

    Pagina di inizio index.php
    Codice PHP:
    <?php
    session_start
    ();
    ?>

    <html>
     <head><title></title></head>
     <body>

     <form method="post" action="login.php">
      
      # Ci sono solo due campi: Username & Password (e pulsante invia)

     </form>
     </body>
    </html>
    <?php
    $_SESSION 
    = array();
    session_destroy();
    ?>
    Ecco. Fin qui si inseriscono i dati e si inviano. I dati vengono passati a login.php.

    Pagina login.php
    Codice PHP:
    <?php
    session_start
    ();

    if (isset(
    $_POST['invia_dati'])) {

      if ((
    $_POST['username'] == 'username_ok') && ($_POST['password'] == 'password_ok')) {

      
    $_SESSION['mantenere_stato_user'] = $_POST['username']; # Metto i valori in $_SESSION
      
    $_SESSION['mantenere_stato_pass'] = $_POST['password'];

      
    header('Location:destinazione.php'); # ..e vengo reindirizzato alla pagina riservata
      
    exit();

      } else {

         
    header('Location:index.php'); # In caso di errore torna indietro..
         
    exit();

      }
    }

    $_SESSION = array();
    session_destroy();
    ?>
    Eccoci. Fin qui invece controlliamo se i valori USERNAME e PASSWORD corrispondono ai valori presenti nell'IF di controllo. In caso positivo si salvano i valori nell'array $_SESSION e si viene reindirizzati alla pagina destinazione.php finale.

    Però..c'è un però..

    Espongo la pagina destinazione.php

    Codice PHP:
    <?php
    session_start
    ();

    if (isset(
    $_SESSION['mantenere_stato_user']) && isset($_SESSION['mantenere_stato_pass'])) {

       echo 
    "Benvenuto!";
       exit();

    } else {

       
    header('Location:index.php'); # Se le variabili di sessione non sono settate si viene reindirizzati alla pagina iniziale.
       
    exit();

    }

    $_SESSION = array();
    session_destroy();
    ?>
    Ecco. Questa è la pagina finale. Lo script funziona ma la domanda è una sola.

    Perchè se entro in pagina "destinazione.php" ed effettuo il refresh del browser, le variabili di sessione non valgono più...e quindi vengo riportato indietro??


    Grazie a tutti.

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Perché alla fine della pagina azzeri e poi distruggi l'array $_SESSION, quindi quando fai il refresh

    if (isset($_SESSION['mantenere_stato_user']) && isset($_SESSION['mantenere_stato_pass'])) {

    è false e viene eseguito l'else

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    762
    Negativo. Il test è stato effettuato sia togliendo $_SESSION = array(); che togliendo addirittura session_destroy(); !!

    Non capisco..

    Vorrei capire..

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Devi togliere entrambe le righe anche da login.php

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    762
    Tolte dappertutto..


  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Da qualche parte devi averle lasciate, altrimenti le variabili di sessione non spariscono da sole.
    Dopo averle tolte riparti dal login.
    Devi toglierle da tutti i file, quindi anche da index.php (nella quale puoi proprio fare a meno anche di session_strat() ), tranne nell'eventuale pagina di logout, lì è giusto che le variabili usate per il login siano distrutte.

    Ovviamente session_start(); devi lasciarla, quella serve.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    762
    Non riesco a spiegarlo. Ho provato senza nessun session_destroy(); e nessun $_SESSION = array(); in tutte le pagine.

    Il risultato è sempre lo stesso: al refresh di pagina, la variabile di sessione sembra essere svanita nel nulla.


    NB: può dipendere dal server? In questo caso...EasyPhp?

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    762
    Buongiorno a tutti. Faccio un'uppata per vedere se si trova una spiegazione. Sarà l'unica.

    kappa e santino?

  9. #9
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Originariamente inviato da wartpro
    Non riesco a spiegarlo. Ho provato senza nessun session_destroy(); e nessun $_SESSION = array(); in tutte le pagine.

    Il risultato è sempre lo stesso: al refresh di pagina, la variabile di sessione sembra essere svanita nel nulla.


    NB: può dipendere dal server? In questo caso...EasyPhp?
    A meno che non hai modificato il tempo di validità della sessione mettendolo a pochi secondi, no, non dipende da easyphp. Ad ogni modo ti consiglio XAMPP, molto meglio secondo me.

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    762
    Buongiorno Alhaz. No la durata è di default (180).

    Penso che si, passerò a xampp perchè ho l'impressione che sto EasyPhp mi dia problemi con le sessioni.

    Questo non è il primo thread che lancio riguardo l'argomento "sessioni" in generale. In pvt mi sapresti dire perchè XAMPP è migliore di EasyPhp? Se puoi (vuoi). Grazie.


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.