Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    17

    problema con login e sessioni

    Ciao a tutti, mi trovo in difficoltà con un sistema di login.

    Sembra che funzioni tutto, però, quando validazione_login.php mi fa il redirect verso piazza.php probabilmente non passa i dati di sessione, perchè ricevo dei notice:

    Notice: Undefined variable: username in C:\Programmi\EasyPHP-5.3.6.1\www\session_ok\check_login.php on line 7

    Notice: Undefined variable: password in C:\Programmi\EasyPHP-5.3.6.1\www\session_ok\check_login.php on line 7

    Quindi se lo script non dichiara username e password, la mia domanda è, come posso fare per eliminare i notice e avere un login corretto e funzionante? secondo la mia conoscenza limitata di php l'unica soluzione sarebbe tenersi l'errore e nasconderlo con una @, ma sono abbastanza convinto che non possa essere la soluzione.

    vi posto le pagine così che possiate farvi un'idea

    validazione_login.php

    Codice PHP:
    <?php
    $username 
    $_POST['user']; //Prendo l'username dell'utente
    $password $_POST['pass']; //Prendo la password dell'utente
    include("confnect.php");
    $query "SELECT * FROM login WHERE username = $username AND password = $password";
    $result mysql_query($query); //Svolgo la query
    if ((isset($result)==$_POST['user']) && (isset($result)==$_POST['pass'])) {
    session_start(); //Apro una sessione
    $_SESSION['username'] = $username;
    $_SESSION['password'] = $password;
    echo
    "Login Effettuato";
    header"refresh: 3; url=areserved.php" );
    }else{
    echo
    "Login non riuscito!";
    header"refresh: 3; url=login.php" );
    }
    ?>
    check_login.php
    Codice PHP:
    <?php
    session_start
    (); //Apro la sessione
    include("confnect.php");
    if(!isset(
    $_SESSION['utente'])!=$username && !isset($_SESSION['password'])!=$password)
    {
    header('Location: login.php');
    }
    ?>
    areserved.php
    Codice PHP:
    <?php
    include("check_login.php");
    echo
    "Area riservata";
    ?>
    grazie a tutti in anticipo per le risposte!

  2. #2
    Codice PHP:
    ...
    if ((isset(
    $result)==$_POST['user']) && (isset($result)==$_POST['pass'])) { 
    ... 
    la funzione isset() restituisce un booleano. Mi sa che devi rivedere un attimino la condizione dell'if.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    17
    ciao satifal, grazie per la risposta... quindi teoricamente è sbagliata la condizione if sia in validazione_login.php sia in check_login.php ma a questo punto cosa mi converrebbe usare?
    io pensavo anche a empty, ma non credo sia appropriato

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    17
    sto andando avanti per tentativi, le soluzioni (non ancora funzionanti ) che ho pensato sono queste:

    validazione_login.php

    Codice PHP:
    <?php
    $username 
    $_POST['user']; //Prendo l'username dell'utente
    $password $_POST['pass']; //Prendo la password dell'utente
    include("confnect.php");
    $query "SELECT * FROM login WHERE username = $username AND password = $password"//Creo la query
    $result mysql_query($query); //Svolgo la query
    if (($_POST['user']==$username)&&($_POST['pass']==$password)){
     
    session_start(); //Apro una sessione
        
    $_SESSION['username'] = $_POST['user'];
        
    $_SESSION['password'] = $_POST['pass'];
        echo
    "Login Effettuato";
        
    header"refresh: 3; url=areserved.php" );
    }
    else {
       echo
    "Login non riuscito!";
       
    header"refresh: 3; url=login.php" );
    }
    ?>
    check_login.php

    Codice PHP:

    <?php
    session_start
    (); //Apro la sessione
    include("confnect.php");
     if(!isset(
    $_SESSION['username']) && !isset($_SESSION['password']))
    {
    header('Location: login.php');
    }
    ?>
    il problema è che mi logga anche se non inserisco nulla o se inserisco user e password sbagliati

    mentre la seconda soluzione è:

    validazione_login.php
    Codice PHP:
    <?php
    $username 
    $_POST['user']; //Prendo l'username dell'utente
    $password $_POST['pass']; //Prendo la password dell'utente

    include("confnect.php");
    $query "SELECT * FROM loginfabio WHERE username = $username AND password = $password"//Creo la query
    $result mysql_query($query); //Svolgo la query
    if ((isset($result)==$_POST['user']) && (isset($result)==$_POST['pass'])) {
     
    session_start(); //Apro una sessione
        
    $_SESSION['username'] = $username;
        
    $_SESSION['password'] = $password;
        echo
    "Login Effettuato";
        
    header"refresh: 3; url=areserved.php" );
    }
    else {
       echo
    "Login non riuscito!";
       
    header"refresh: 3; url=login.php" );
    }
    ?>
    check_login.php
    Codice PHP:
    <?php
    session_start
    (); //Apro la sessione
    include("confnect.php");
     if (((
    $_SESSION['utente'])!=$username) && (($_SESSION['password'])!=$password))
    {
    header('Location: login.php');
    }
    ?>
    in questo caso se lascio i campi vuoti è ok, mentre se inserisco user e pass corretti o sbagliati mi logga e mi da dei notice:
    Notice: Undefined index: utente in C:\Programmi\EasyPHP-5.3.6.1\www\session_ok\check_login.php on line 8

    Notice: Undefined variable: username in C:\Programmi\EasyPHP-5.3.6.1\www\session_ok\check_login.php on line 8

    secondo voi come posso risolvere? devo rivoluzionare tutto? se si forse ho bisogno di qualche esempio pratico, comunque per ora grazie!

  5. #5
    Nella prima soluzione:

    Codice PHP:
    <?php
    $username 
    $_POST['user']; //Prendo l'username dell'utente
    $password $_POST['pass']; //Prendo la password dell'utente
    ...
    if ((
    $_POST['user']==$username)&&($_POST['pass']==$password)){
    ...
    ?>
    la condizione dell'if è sempre vera (li hai assegnati tu i valori!!!) e ovvio che siano uguali.

    La seconda soluzione è identica al tuo primo post.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    17
    immaginavo che il problema fosse quello, quindi la domanda sorge spontanea, come devo modificare l'if ?
    se scrivo
    Codice PHP:
    if (($_POST['user']==$username)&&($_POST['pass']==$password)){ 
    sbaglio perchè confronto quello che l'utente invia dal form con la variabile contenente quello che l'utente invia dal form, e se scrivo
    Codice PHP:
    if (($_POST['user']==$result)&&($_POST['pass']==$result)){ 
    non sto confrontando i dati presi dal form con i dati prelevati con la query dal database?
    perchè ho fatto una prova ma ricevo un Login errato! come risposta, quindi forse non mi è chiaro il meccanismo per prelevare i dati dal database... scusa la confusione, è che sono ancora alle prime armi con la programmazione

  7. #7
    Non ha senso confrontare i dati estratti dal DB utilizzando $username e $password in quanto non potranno essere che uguali (se presenti).
    Devi verificare solamente se essi sono presenti o meno sul DB. Se sono presenti allora l'utente è valido, altrimenti no.

    Prova una cosa del genere:

    Codice PHP:
    <?php
    $username 
    $_POST['user']; //Prendo l'username dell'utente
    $password $_POST['pass']; //Prendo la password dell'utente
    include("confnect.php");
    $query "SELECT * FROM login WHERE username = '$username' AND password = '$password'"//Creo la query
    $result mysql_query($query); //Svolgo la query
    $rows mysql_num_rows($result);
    if (
    $rows == 1) { // utente valido
        
    session_start(); //Apro una sessione
        
    $_SESSION['username'] = $username;
        
    $_SESSION['password'] = $password;
        echo
    "Login Effettuato";
        
    header"refresh: 3; url=areserved.php" );
    } else {
       echo
    "Login non riuscito!";
       
    header"refresh: 3; url=login.php" );
    }
    ?>
    Originariamente inviato da mone2984
    sto andando avanti per tentativi...
    Che senso ha questo? Le cose bisogna comprenderle e non andare per tentativi!
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    17
    hai ragionissima satifal è solo che ho avuto un momento di sconforto perchè è un lavoro che avevo già fatto con session_is_registered(); ed è da due giorni che ci lavoro senza riuscire a farlo funzionare e la documentazione che ho trovato è tutta in inglese, ed io non ne mastico molto.
    comunque per ora grazie, ora lo provo e poi faccio sapere!

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    17
    Ok, ho risolto, grazie mille satifal, non mi era chiaro che tipo di controllo dovevo fare, pensavo di dover confrontare i dati del form con i dati inseriti nel database, mentre il controllo da fare è solo se i dati sono presenti nel database.

    comunque posto i file finiti così anche altri possono beneficiarne

    login.php
    Codice PHP:
    <form action="validazione_login.php" method="post" name="form_login">



    User:

    <
    input type="text" name="user" title="inserisci nome utente "/>
    </
    p>



    Pass:

    <
    input type="password" name="pass" title="inserisci password"/>
    </
    p>



    <
    input type="submit" value="Invia"/>
    </
    p>
    </
    form
    logout.php
    Codice PHP:
    <?php
    session_start
    ();
    session_destroy();
    echo
    "Logout Effettuato!";
    header"refresh: 3; url=login.php" );
    ?>
    validazione_login.php
    Codice PHP:
    <?php
    $username 
    $_POST['user']; //Prendo l'username dell'utente
    $password $_POST['pass']; //Prendo la password dell'utente
    include("confnect.php");
    $query "SELECT * FROM login WHERE username = '$username' AND password = '$password'"//Creo la query (bisogna sostituire login con il nome della vostra tabella e username e password con i nomi dei campi del vostro database
    $result mysql_query($query); //Svolgo la query
    $rows mysql_num_rows($result);
    if (
    $rows == 1) { // utente valido
        
    session_start(); //Apro una sessione
        
    $_SESSION['username'] = $username;
        
    $_SESSION['password'] = $password;
        echo
    "Login Effettuato";
        
    header"refresh: 3; url=areserved.php" );
    } else {
       echo
    "Login non riuscito!";
       
    header"refresh: 3; url=login.php" );
    }
    ?>
    check_login.php
    Codice PHP:
    <?php
    session_start
    (); //Apro la sessione
    if ((!$_SESSION['username'] ) && (!$_SESSION['password'] )){
    header('Location: login.php');
    }
    ?>
    areserved.php
    Codice PHP:

    <?php
    include("check_login.php");
    echo
    "Area riservata";
    echo
    "<a href=logout.php>Logout</a>";
    ?>
    chiaramente per usarlo andrebbe aggiunta tutta la parte relativa alla sicurezza che io non ho ancora inserito, ma per aiutarsi nello studio credo che vada bene.
    Ovviamente se qualcuno ha qualcosa da aggiungere o da ridire si faccia avanti perchè se motivata ogni osservazione è ben accetta

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.