Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
Laborator - Exemplu autentificare
Crearea bazei de date si a tabelelor din baza de date.
Acest pas implica o analiza implicita a cerintelor aplicatiei. Pentru aplicatii de test acest pas poate fi omis, insa cu cat este mai complexa aplicatia este nevoie sa se aloce mai mult timp pentru analiza tuturor entitatilor participante la aplicatie, dar si a relatiilor dintre acestea.
Pentru ca noi vom folosi aceste tabele doar pentru a exemplifica functionarea acestei tehnologii, vom trece peste pasul de analiza.
Fie urmatoarea tabela de utilizatori:
CREATE DATABASE test; USE test; CREATE TABLE users ( id_user INT NOT NULL AUTO_INCREMENT PRIMARY KEY , firstname VARCHAR( 30 ) NOT NULL , lastname VARCHAR( 30 ) NOT NULL , adress VARCHAR( 100 ) NOT NULL , username VARCHAR( 15 ) NOT NULL , password VARCHAR( 100 ) NOT NULL , birthdate DATE NOT NULL , CNP VARCHAR( 30 ) NOT NULL , BI VARCHAR( 30 ) NOT NULL , passport VARCHAR( 30 ) NOT NULL |
Crearea unui formular HTML pentru introducerea informatiilor de catre utilizator
Un utilizator va incerca sa se autentifice prin username si parola completand un formular HTML.
Acest formular contine:
Un camp text pentru username
Un camp text pentru parola
Un buton prin care formularul va fi transmis pentru procesare. Actiunea pe care butonul o va face este specificata prin cod JavaScript (form.submit()).
Atributul action al formularului este fisierul login.php acolo unde vor fi procesate informatiile introduse de catre utilizator.
Formularul HTML:
index.php <html> <head> <title>Autentificare</title> </head> <body leftmargin='0' topmargin='0' bottommargin='0' rightmargin='0'> <form name='login' method='post' action='login.php'> <table width='50%' align='center' valign='center' border='0' cellpadding='0' cellspacing='0'> <tr> <td align='right' valign='top'> <strong> <font size='2' face='Verdana, Arial, Helvetica, sans-serif'> Username </font> </strong> </td> <td align='left' valign='top'> <input type='text' name='username'> </td> </tr> <tr> <td align='right' valign='top'> </td> <td align='left' valign='top'> </td> </tr> <tr> <td width='30%' align='right' valign='top'> <strong> <font size='2' face='Verdana, Arial, Helvetica, sans-serif'> Parola </font> </strong> </td> <td width='70%' align='left' valign='top'> <input type='password' name='password'> </td> </tr> <tr> <td align='right' valign='top'> </td> <td align='left' valign='top'> </td> </tr> <tr> <td align='right' valign='top'> </td> <td align='left' valign='top'> <input name='button' type='button' onClick='form.submit();' value='Login'> </td> </tr> </table> </form> </body> </html> |
Procesarea informatiilor din formularul HTML printr-un script PHP
Acest formular HTML, va fi procesat de catre un script PHP si in functie de validitatea datelor (verificarea lor in baza de date ce contine tabela mai sus creata), utilizatorul va avea acces sau nu mai departe. Pentru acest utilizator se va deschide o sesiune.
Vom folosi si urmatorul fisier de conectare la baza de date pe care il vom include in toate paginile in care avem nevoie sa deschidem o conexiune catre baza de date:
conectare.php <?php /* initializare variabile */ $host = 'localhost'; $db_user = 'root'; $db_password = 'lavinia'; $db_name = 'test'; /* conectare la serverul de MySQL */ $connect = mysql_connect($host, $db_user, $db_password) or die('Could not connect: ' . mysql_error()); /* selectarea bazei date */ mysql_select_db($db_name, $connect); ?> |
Fisierul login.php va contine partea de procesare a datelor introduse de utilizator.
Se va selecta din baza de date utilizatorul care are username-ul si parola preluate din formularul HTML.
Daca utilizatorul nu exista, se da mesaj de eroare si se va face redirectarea catre formularul initial (index.php) pentru a se completa cu datele corecte.
Daca datele introduse au fost corecte se initializeaza variabilele sesiune si se va face redirectarea catre pagina de inceput a portalului(home.php).
login.php <? /* verificam daca au fost completate amandoua campurile */ if($_POST['username'] =='' || $_POST['password'] =='') /* conectarea la baza de date */ include('conectare.php'); /* criptarea MD5 a parolei */ $encrypted_password = md5($_POST['password']); /* interogarea de verificare/ slectare a utilizatorului din baza de date */ $query ='SELECT id_user, firstname, lastname FROM users WHERE username=''.$_POST['username'].'' AND password=''.$encrypted_password.'' '; $response = mysql_query($query) or die('Invalid query: ' . mysql_error()); $row = mysql_fetch_array($response); if(mysql_num_rows($response)!=1) /* incepe sesiunea */ session_start(); /* stocarea variabilelor sesiune */ $_SESSION['logged_name'] = $row['firstname'].' '.$row['lastname']; $_SESSION['logged_username'] = $_POST['username']; $_SESSION['logged_password'] = $encrypted_password; $_SESSION['logged_session_id'] = session_id(); $_SESSION['logged_id_user'] = $row['id_user']; header('location: home.php'); ?> |
Continuarea sesiunii, accesul utilizatorului catre paginile cu autentificare
Pagina home.php, ca de altfel toate paginile care pot fi vazute numai de utilizatorul respectiv, vor include fisierul autorizare.php, care va valida pentru fiecare pagina validitatea sesiunii.
Acest fisier de autentificare contine urmatoarele operatii:
se continua sesiunea deschisa de utilizator - session_start()
se continua conexiunea la serverul de MySQL prin includerea fisierului conectare.php
se verifica identificatorul de sesiune
se verifica datele utilizatorului in baza de date
autorizare.php <?php /* continuarea sesiunii */ session_start(); /* continuarea conexiunii la serverul de MySQL */ include('conectare.php'); /* verificarea id-ului de sesiune */ if($_SESSION['logged_session_id'] != session_id()) /* verificarea username-ului si a parolei */ $query = 'SELECT id_user FROM users WHERE username=''.$_SESSION['logged_username'].'' AND password=''.$_SESSION['logged_password'].'''; $result = mysql_query($query, $connect) or die('Invalid query: ' . mysql_error()); if(mysql_num_rows($result) != 1) ?> |
Fisierul home.php este o pagina la care are acces numai un utilizator autorizat. De aceea, asa cum am specificat si mai sus ea va include fisierul autorizare.php.
home.php <? include('autorizare.php') ?> <html> <head> <title>Home</title> </head> <body leftmargin='0' topmargin='0' bottommargin='0' rightmargin='0'> <h5> Hello, <?php print $_SESSION['logged_name']; ?> </h5> </body> </html> |
Cerinte laborator
Sa se creeze o baza de date test_angajati la care sa se adauge tabelele de mai jos.
Sa se creeze o tabela "departamente" cu departamentele unei firme
o id_departament
o nume_departament
Sa se introduca in tabela "departamente" urmatoarele departamente: Administrativ, Contabilitate, IT, Dezvoltare, Testare
Sa se creeze o tabela "angajati" cu angajatii unei firme care sa contina urmatoarele campuri:
o id_angajat - cheie primara
o id_departament - cheie secundara
o nume
o prenume
o username
o parola
o data_nasterii
o este_manager - boolean
Sa se introduca in tabela cu angajati cate 2 angajati pentru fiecare departament, dintre care unul sa fie manager
Sa se foloseasca paginile oferite mai sus spre exemplu pentru ca un angajat sa se poata autentifica si din pagina de home sa poata fi redirectat catre o pagina unde sa poata vedea o lista cu toti angajatii firmei afisati pe departamente si ordonati dupa nume si prenume.
De asemenea sa se adauge in pagina home.php un link denumit Logout. Prin accessarea acestui link utilizatorul va fi redirectat catre pagina de inceput(formularul de login), iar variabilele sesiune vor fi resetate.
Copyright © 2024 - Toate drepturile rezervate