Visualizzazione dei risultati da 1 a 7 su 7

Discussione: login e sessioni

  1. #1

    login e sessioni

    allora, ho iniziato oggi con il php (si, me ne vergogno).

    ho letto le varie guide su questo forum ed ho letto un manuale di quelli della apogeo, però alcune cose non mi sono chiare(forse il flusso è stato troppo e tutto insieme).

    le mie attuali "difficoltà" sono:

    1) ho creato il form con nick e password, ora voglio fare il confronto con i dati nel db, e in base ai "diritti" visualizzo una determinata pagina.

    2) le sessioni...come ca...chio funzionano?

    vi posto quello che ho fatto per ora o mi dite tutto voi?

  2. #2

    Re: login e sessioni

    Originariamente inviato da franksisca
    allora, ho iniziato oggi con il php (si, me ne vergogno).
    non vergognartene, si deve pur iniziare da qualche parte

    1) ho creato il form con nick e password, ora voglio fare il confronto con i dati nel db, e in base ai "diritti" visualizzo una determinata pagina.
    nel form del login inserisci come action la pagina php che va a controllare che i dati inseriti siano esatti, e nella pagina php esegui una query sql tipo "SELECT livello_auth FROM utenti WHERE username = '{$_POST[username]}' and pwd = '{$_POST[password]}' LIMIT 1", quindi estrai i dati tramite fetch_array o conti tramite num_rows le righe selezionate, e se il risultato della query è maggiore a 1, vuol dire che l'utente è presente in database, quindi lo reindirizzi tramite header("Locationagina.php") alla pagina prescelta

    2) le sessioni...come ca...chio funzionano?
    le sessioni sono semplici a dire la verità: funzionano un po' come dei cookie, ma sono invisibili ed il loro valore viene salvato a livello server (e quindi non sono modificabili dall'utente).
    all'inizio di ogni pagina dove t'interessa tenere la tracciatura dell'utente, inserisci session_start() e, per esempio se vuoi controllare che l'utente sia loggato, fai if(!is_set($_SESSION)) die("Non disponi dei diritti per visualizzare questa pagina");
    Ovviamente devi inizializzare la variabile di sessione al login, quindi al punto 1.

  3. #3
    ok, grazie.


    cmq non mi vergogno di iniziare col php...ma mi vergogno di aver iniziato "tardi"...asd

  4. #4
    SELECT livello_auth FROM utenti WHERE username = '{$_POST[username]}' and pwd = '{$_POST[password]}' LIMIT 1",
    io non sono sufficientemente bravo per giudicare... ma a me sembra una query da pazzi questa.

    Io, per quel che ho imparato/letto/capito si dovrebbe fare almeno l'addslashes alle variabili post (ovviamente inserite nel db dopo il filtro con addslashes) ed possibilmente anche un trim() per eliminare gli spazi.

    Inoltre se, eventualmente, si vuole evitare il case sensitive (distinzione fra maiuscole e minuscole) bisognerebbe ulteriormente filtrare le variabili post con strtolower ()

    Vi posto il mio piccolo lavoretto sperando possiate contribuire a giudicarlo...
    1)pagina login.php (cioè il form... in questa versione semplificata ho rimosso il javascript che mi verifica i campi vuoti)
    Codice PHP:
    <html>
    <
    head>
    <
    title>pagina di login</title>
    </
    head>
    <
    form name=accedi action=verifica.php method=post
    <
    table>
        <
    tr>
            <
    td>

    nome</p></td><td><input type=text name=username></td>
        </
    tr>
        <
    tr>
            <
    td>

    password</p></td><td><input type=password name=pass></td>
        </
    tr>
        <
    tr>
            <
    td></td><td><input type=submit value=accedi> <input type=reset value=cancella></td>
        </
    tr>
    </
    table>
    </
    form>
    </
    body>
    </
    html
    la pagina verifica.php che a seconda del risultato reindirizza di nuovo al login o alla pagina protetta.

    Codice PHP:
    <?php
    session_start
    ();

    /**RICEZIONE CREDENZIALI DI ACCESSO**/

    if(    (isset($_POST['username']))    &&    (!empty($_POST['username']))    )
        {
        
    $username=addslashes(strtolower(trim($_POST['username'])));
        }
    else {
    header("location: login.php");exit();}


    if(    (isset(
    $_POST['pass']))        &&    (!empty($_POST['pass']))    )
        {
        
    $pass=addslashes(strtolower(trim($_POST['pass'])));
        }
    else {
    header("location: login.php");exit();}



    $db_host "localhost";
    $db_user "root";
    $db_password "";
    $db_database "nome_db";

    $db_tabella "utenti";

    $connessione mysql_connect($db_host,$db_user,$db_password); 
    mysql_select_db($db_database,$connessione); 


    $sql"select id_utenti from ".$db_tabella." where nome='".$username."' and pass='".$pass."'";
    $query=mysql_db_query($db_database,$sql,$connessione);
    $num=mysql_num_rows($query);

    if(
    $num>0)    {
            
    $_SESSION['utente']="utente";
            
    header("location: protetta.php");
            }

    else {
    header("location: login.php");}
    ?>
    protetta.php (e i successivi link anche essi protetti inizieranno sempre con questo script php)

    Codice PHP:

    <?php
    session_start
    ();
    if(    (!isset(
    $_SESSION['utente']))    ||    ($_SESSION['utente']!="utente")    )
        {
        
    header("location: login.php");
        exit();
        }
    ?>

    <html>
    <body>
    <h1>pagina protetta</h1>
    </body>
    </html>

    Sono ben accette tutte le correzioni!!

  5. #5
    io non sono sufficientemente bravo per giudicare... ma a me sembra una query da pazzi questa.
    ovviamente è super sprotetta come query, certo.
    e a voler essere pignoli, alla fine di "select id_utenti from ".$db_tabella." where nome='".$username."' and pass='".$pass."'"; metterei un bel LIMIT 1, così eviti SQL injection che ti mostrino tutti gli utenti

  6. #6
    grazie infinitamente per la correzione...

    purtroppo, essendo ai primi passi con il php e non avendo nessun "maestro" che mi corregge, ho paura a testare i miei script in rete e spesso rimangono a lungo nella mia cartella in locale... quindi spesso li posto qui su html.it sperando che qualcuno gli dia almeno uno sguardo...

  7. #7
    grazie anche a te...ho avuto la febbre (e l'ho ancora)...appemna mi sento meglio ricomincio a lavorarci

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.