• User Attivo

    Login con cookies

    Ciao a tutti,

    è da qualche ora che mi stò sbattendo per capire cosà non và in questi script fatti da me.

    Posto i codici:

    FORM DI ACCESSO

    [php]
    <FORM ACTION="pannello.php?funzione=login" METHOD=POST>

                <table><tr><td width=\"105\">
                <strong>E-Mail: </strong></td><td><input type=\"text\" name=\"email\" size=\"20\" MAXLENGTH=\"45\"></td></tr>
    			<tr><td><strong>Password: </strong></td><td><input type=\"password\" name=\"password\" size=\"20\" MAXLENGTH=\"25\"></td></tr>
                <tr><td><br></td><td><br><input name=\"ricorda\" value=\"1\" type=\"checkbox\" > &nbsp;Ricorda</td></tr></table>
                <br>
                <INPUT TYPE=SUBMIT VALUE=\"invia\"><br>   <br><br>[/php]
    

    FUNZIONE DI LOGIN

    [php]function login(){
    session_start();
    include("include/connessione.php");
    if (riconosci()) {
    header("Location:pannello.php?funzione=main");
    }
    else {

    $email = stripslashes($_POST['email']);
    $password = md5(stripslashes($_POST['password']));
    $risultati = mysql_query("SELECT * FROM user where email='$email' && password ='$password'");
    $rows = mysql_fetch_assoc($risultati);
    if($rows != "") {
    $idutente = $rows['id'];
    $nomeutente = $rows['nome'];
    $cognomeutente = $rows['cognome'];
    if($_POST['ricorda'] == "1") {
    setcookie("login", "OK", time() + 2592000);
    }
    $_SESSION['id_utente'] = $idutente;
    $_SESSION['nome_utente'] = $nomeutente;
    $_SESSION['cognome_utente'] = $cognomeutente;

    include("include/meta.php");
    echo "<div id="main">";
    include("tema/header.php");
    echo '<meta http-equiv="refresh" content="5;url=pannello.php?funzione=main">';

    $message = "<br><br>Login eseguito con successo.<br><br>
    Tra qualche istante sarai reindirizzato alla pagina del pannello di controllo.<br><br>
    <a href="pannello.php">Clicca qui</a> se non vuoi attendere ulteriormente.<br>";
    }
    else {
    include("include/meta.php");
    echo "<div id="main">";
    include("tema/header.php");
    $message = "<br>Indirizzo email non registrato oppure hai sbagliato la password.<br><br>
    <a href="pannello.php"><b>Ritenta il login</b></a>";
    }

    //parte della pagina centrale dove costruisco tutto, sotto variabile $message
    include("tema/pag_centrale.php");
    //footer finale
    include("tema/footer.php");
    }
    }[/php]

    PAGINA DOVE VIENI INDIRIZZATO
    [php]
    function main(){
    session_start();
    include("include/connessione.php");
    if (riconosci()) {
    header("Location:pannello.php?funzione=main");
    }
    else {
    include("include/meta.php");
    echo "<div id="main">";
    include("tema/header.php");

    $nome = $_SESSION['nome_utente'];
    $cognome = $_SESSION['cognome_utente'];
    $id = $_SESSION['id_utente'];
    $message = "<br><br>Login eseguito con successo <b>$nome $cognome</b>.<br><br>
    <br><br>
    <a href="pannello.php?funzione=logout">Logout</a><br>";

    //parte della pagina centrale dove costruisco tutto, sotto variabile $message
    include("tema/pag_centrale.php");
    //footer finale
    include("tema/footer.php");
    }
    }
    [/PHP]

    Bene, dopo che eseguo il login sia se metto ricordami che se lo lascio vuoto, tutto và in loop! Questo fin quando non distruggo i cookie con la funzione...

    [php]
    function logout(){
    session_start();
    include("include/connessione.php");
    unset($_SESSION['nome_utente']);
    unset($_SESSION['cognome_utente']);
    unset($_SESSION['id_utente']);

    session_unset();
    session_destroy();
    

    setcookie("login", "OK", time() - 1);

    include("include/meta.php");
    echo "<div id="main">";
    include("tema/header.php");[/php]

    La funzione riconosci è la seguente

    [php]function riconosci()
    {
    if(isset($_SESSION['nome_utente']) AND isset($_SESSION['cognome_utente']) AND isset($_SESSION['id_utente']))
    return true;
    else if($_COOKIE["login"] == "OK")
    return true;
    else
    return false;
    }[/php]

    Dove sbaglio? Perchè và in loop la pagina dopo il login??


  • ModSenior

    Ciao Sovietiko,
    sei sicuro vada in loop e non restituisca invece una pagina bianca a causa della configurazione del php ad esempio?
    Non vedo nulla che potrebbe mandarlo in loop.


  • User Attivo

    Ciao dark,

    si sono sicuro perchè con mozilla dà l'errore che la pagina non reindirizza in modo corretto:
    Questa pagina non reindirizza in modo corretto

    Firefox ha rilevato che il server sta reindirizzando la richiesta per questa pagina in modo che non possa mai essere completata.

    e con IE ricarica la pagina 10 volte al secondo.. Per cui è sicuramente in loop..

    Se elimino la gestione dei Cookies tutto funziona regolarmente..

    Da cos'altro può dipendere se non dallo script?

    Grazie, ciao.


  • ModSenior

    Perchè fai:
    [php]
    if (riconosci()) {
    header("Location:pannello.php?funzione=main");
    }
    [/php]
    Al massimo dovresti fare che se non è riconosciuto lo manda alla pagina di login.


  • User Attivo

    @Thedarkita said:

    Perchè fai:
    [php]
    if (riconosci()) {
    header("Location:pannello.php?funzione=main");
    }
    [/php]
    Al massimo dovresti fare che se non è riconosciuto lo manda alla pagina di login.

    Ma che cavolo, mi perdo in piccole cose a volte...

    Infatti era quello, ho cambiato il redirect alla funzione main e tutto funziona ai comandi.

    Visto che sei così disponibile, come lo reputi questo tipo di log in? sicuro? script semplice? o mi conviene salvare le sessioni nel db?

    Grazie mille come sempre, sei un grande!


  • ModSenior

    Il funzionamento del cookie per il ricordami non mi sembra molto sicuro, chiunque potrebbe falsificare un cookie mettendo come valore OK.
    Invece di mettere:
    [php]
    if (riconosci()) {
    header("Location:pannello.php?funzione=main");
    }
    else {

    // Mio codice
    }
    [/php]
    Se metti:
    [php]
    if (riconosci())
    {
    header("Location: pannello.php?funzione=main");
    exit;
    }
    // Mio codice
    [/php]
    Il risultato è uguale, ma a mio avviso il codice è più leggibile.
    Le sessioni se non hai necessità particolari, le utilizzerei cosi come hai fatto.


  • User Attivo

    Ok grazie mille per il consiglio!

    A presto, ciao.