Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24

Discussione: Login: It don't work.

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    31

    Login: It don't work.

    Salve a tutti,
    sto lavorando ad un piccolo progetto in PHP e si è presentata la necessità di creare un script per effettuare il login. Spulciando per la rete, ho trovato un Tips&Tricks sul sito phpnews.it, e così ho seguito quelle linee guida. Ora però ho dei problemi.
    - Il logout non ho capito bene perché, ma non funziona. (l'ho fatto io perché nella guida non c'era)
    - La sessione credo che non tenga traccia del login effettuato (quando si ricarica la pagina è come se si distruggesse la sessione).

    Il codice è questo, sapete aiutarmi?
    http://pastebin.com/0V6a84rE

    Grazie in anticipo.

    Alberto.

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    se nelle pagine successive manca
    Codice PHP:
    session_start(); 
    i dati di sessione non vengono propagati, quindi ti trovi con la sessione distrutta o in altre parole, logged-out.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    31
    Quindi è sbagliato fare come ho fatto io? Intendo mettere il form HTML e il codice PHP nella stessa pagina.

  4. #4
    metti session_start(); soltanto all'inizio della pagina e risolvi il problema: non basta metterla infatti quando devi registrare un valore nell'array $_SESSION ma anche quando devi leggere da $_SESSION, altrimenti tale array rimarrà sempre vuoto

    in poche parole session_start() imposta il cookie con il session id, crea il file temporaneo per salvare le informazioni se è la prima volta che viene aperta, altrimenti si occupa di leggere il contenuto del file temporaneo, deserializzare i dati e popolare l'array $_SESSIOn

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    31
    Originariamente inviato da Ratatuia
    metti session_start(); soltanto all'inizio della pagina e risolvi il problema: non basta metterla infatti quando devi registrare un valore nell'array $_SESSION ma anche quando devi leggere da $_SESSION, altrimenti tale array rimarrà sempre vuoto

    in poche parole session_start() imposta il cookie con il session id, crea il file temporaneo per salvare le informazioni se è la prima volta che viene aperta, altrimenti si occupa di leggere il contenuto del file temporaneo, deserializzare i dati e popolare l'array $_SESSIOn
    Ah, quindi basta metterla all'inizio di ogni listato PHP, non darà problemi di sorta con i vari if e funzioni che ho messo?

  6. #6
    no esatto... l'unico problema, come per il settaggio dei cookies o l'esecuzione di header(), che se mandi dell'output prima di direttive per l'header del pacchetto http, php ti genera un warning

    (piccola correzione, si dice "it doesn't work", non "it don't work")

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    31
    Originariamente inviato da Ratatuia
    no esatto... l'unico problema, come per il settaggio dei cookies o l'esecuzione di header(), che se mandi dell'output prima di direttive per l'header del pacchetto http, php ti genera un warning
    Mmh, qui ci ho capito poco.
    (piccola correzione, si dice "it doesn't work", non "it don't work")
    Hai ragione, non è da me xD

  8. #8
    Originariamente inviato da Whistler
    Mmh, qui ci ho capito poco.

    Hai ragione, non è da me xD
    quando php è usato insieme ad apache il suo output viene inserito in un pacchetto http che è formato da header + body
    riassumendo brevemente, le funzioni di php tipo session_start(), header(), setcookie() ecc ecc modificano l'header
    le funzioni tipo print o echo invece modificano il body

    le due cose devono avvenire nell'ordine, prima l'header poi il body

    se esegui print o echo e successivamente fai header() o similare, php ti caccia un warning, a meno di usare ob_start()

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    31
    Originariamente inviato da Ratatuia
    quando php è usato insieme ad apache il suo output viene inserito in un pacchetto http che è formato da header + body
    riassumendo brevemente, le funzioni di php tipo session_start(), header(), setcookie() ecc ecc modificano l'header
    le funzioni tipo print o echo invece modificano il body

    le due cose devono avvenire nell'ordine, prima l'header poi il body

    se esegui print o echo e successivamente fai header() o similare, php ti caccia un warning, a meno di usare ob_start()
    Aaah, si questo lo sapevo, mi ci sono già imbattuto in questo errore (cioé, sapevo la storia dei warning, il fatto dell'header e del body l'ho imparato adesso):P
    Comunque, adesso provo a modificare un po' lo script in base alle cose che mi avete detto, vediamo che succede

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    31
    Mmmh, non ci siamo.
    Ho messo la funzione session_start() all'inizio dello script, e in effetti se metto qualcosa nell'array session, dopo il login c'è ancora. Il problema però persiste. Se, dopo aver fatto il login, io schiaccio sul link Reload (che non fa altro che ricaricare la pagina senza le querystring del GET) perde tutto, e mi mostra di nuovo il form per loggarsi.
    A dire il vero io ho trovato anche il perché di questa cosa. In pratica è dovuta a questo if:
    Codice PHP:
    if ($_GET['status'] == "done") {
            
    // se la condizione è verificata, significa che il login è stato effettuato
            // quindi mostra il pulsante per effettuare il logout
            
    echo '
                [url="'
    .$_SERVER[PHP_SELF].'"]Reload[/url]

                [i]Benvenuto [b]'
    .$_SESSION['user'].'[/b][/i]
                <form action="" method="post" name="logout">
                    <input type="submit" name="logout_but" value="Logout" />
                </form>'
    ;
        } else {
            
    // altrimenti mostra il form
            
    echo '
                [url="'
    .$_SERVER[PHP_SELF].'"]Reload[/url]
                <form action="" method="post" name="login">
                    Username: <input type="text" name="user" value="" />

                    Password: <input type="password" name="pass" value="" />

                    <input type="submit" name="login_but" value="Invia" />
                </form>'
    ;
        } 
    Mi rendo conto che non è una gran trovata da parte mia, il fatto è che questo costrutto è stato un ripiego. Come faccio a far mantenere il login (e a mostrare il form per il logout) anche quando non c'è nulla nella querystring (quando praticamente richiamo la pagina tipo: localhost/miapagina.php senza nulla di accodato)?

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.