PHP & MySQL - Login Sistem (System)


Implementacija mehanizma za provjeru autentičnosti korisnika

Autentifikacija korisnika je vrlo česta u modernim web aplikacijama. To je sigurnosni mehanizam koji se koristi za ograničavanje neovlaštenog pristupa područjima i alatima na web lokaciji samo za članove. U ovoj lekciji ćemo kreirati jednostavan sistem za registraciju i prijavu koristeći PHP i MySQL. Ova se lekcija sastoji od dva dijela: u prvom dijelu ćemo kreirati obrazac za registraciju korisnika, a u drugom dijelu ćemo kreirati obrazac za prijavu, kao i stranicu dobrodošlice i skriptu za odjavu.



Izgradnja sistema registracije

U ovom ćemo dijelu izgraditi sistem registracije koji omogućava korisnicima da kreiraju novi račun (nalog) popunjavanjem web obrasca. Ali, prvo moramo stvoriti tabelu koja će da sadrži sve korisničke podatke.


Korak 1: Stvaranje tabele baze podataka

Izvršite sljedeći SQL upit za kreiranje korisničke tabele unutar vaše MySQL baze podataka.

CREATE TABLE users (
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

Pogledajte lekciju o SQL CREATE TABLE izjavi za detaljne informacije o sintaksi za kreiranje tabele u MySQL sistemu baze podataka.


Korak 2: Stvaranje datoteke konfiguracije (Config File)

Nakon kreiranja tabele, trebamo stvoriti PHP skriptu kako bismo se povezali na MySQL poslužitelja baze podataka. Stvorimo datoteku pod nazivom "config.php" i u nju stavimo sljedeći kod.




Korak 3: Izrada formulara za registraciju (Registration Form)

Stvorimo još jednu PHP datoteku "register.php" i u nju stavimo sljedeći primjer koda. Ovaj primjer koda stvoriće web obrazac koji omogućava korisniku da se sam registrira. Ova skripta će takođe generisati greške ako korisnik pokuša poslati obrazac bez unošenja bilo koje vrijednosti ili ako je korisničko ime koje je korisnik unio već zauzeto.


U gornjem primjeru koristili smo PHP funkciju password_hash() za kreiranje enkriptovane lozinke od lozinke koju je korisnik unio. Ova funkcija kreira heširanje lozinke pomoću jakog jednosmjernog algoritma heširanja. Takođe generiše i primjenjuje nasumičnu. To znači da će čak i ako dva korisnika imaju iste lozinke, njihovi hešovi lozinki biti različiti.

U trenutku prijave provjerićemo zadanu lozinku pomoću hash lozinke pohranjene u bazi podataka pomoću PHP funkcije password_verify(), kao što je prikazano u sljedećem primjeru. Koristili smo okvir Bootstrap za brzo i jednostavno oblikovanje izgleda obrazaca.



Izgradnja sistema za prijavu (Login Form)

U ovom ćemo dijelu stvoriti obrazac za prijavu u koji korisnik može unijeti svoje korisničko ime i lozinku. Kada korisnik pošalje obrazac, ovi ulazi će se provjeriti prije pohranjivanja u bazu podataka, ako se korisničko ime i lozinka podudaraju, korisnik kreira nalog i odobra mu se pristup web stranici. U suprotnom će pokušaj prijave biti odbijen.


Korak 1: Stvaranje obrasca za prijavu

Stvorimo datoteku pod nazivom "login.php" i u nju stavimo sljedeći kod.



Korak 2: Stvaranje stranice dobrodošlice (Welcome Page)

Evo koda naše datoteke "welcome.php", gdje se korisnik preusmjerava nakon uspješne prijave.

<?php
// Inicijaliziranje sesije
session_start();
 
// Provjerava da li je korisnik prijavljen, ako nije, preusmjerite ga na stranicu za prijavu
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
    header("location: login.php");
    exit;
}
?>
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Dobrodošli</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <style type="text/css">
        body{ font: 14px sans-serif; text-align: center; }
    </style>
</head>
<body>
    <div class="page-header">
        <h1>Pozdrav,  <b><?php echo htmlspecialchars($_SESSION["username"]); ?></b>. 
        dobrodošli na našu stranicu.</h1>
    </div>
    <p>
        <a href="reset-password.php" class="btn btn-warning">Resetuj lozinku</a>
        <a href="logout.php" class="btn btn-danger">Odjavi se</a>
    </p>
</body>
</html>

Ako podaci dolaze iz vanjskih izvora, poput obrasca koji ispunjavaju anonimni korisnici, postoji rizik da možda sadrže zlonamjernu skriptu za pokretanje napada na više web lokacija (XSS). Zbog toga morate izbjeći ove podatke pomoću PHP funkcije htmlspecialchars() prije prikazivanja u pretraživaču, tako da bilo koja HTML oznaka koju sadrži skripta postane neškodljiva.


Korak 3: Stvaranje skripte za odjavu (Logout Script)

Sada, kreirajmo datoteku "logout.php". Kada korisnik klikne na vezu za odjavu, skripta unutar ove datoteke uništava sesiju i preusmjerava korisnika na stranicu za prijavu.

<?php
// Inicijaliziranje sesije
session_start();
 
// Poništite sve varijable sesije
$_SESSION = array();
 
// Uništite sesiju
session_destroy();
 
// Preusmjeravanje na stranicu za prijavu
header("location: login.php");
exit;
?>


Dodavanje funkcije resetiranja lozinke

Konačno, u ovom dijelu ćemo dodati program za ponovno postavljanje lozinke u naš sistem za prijavu. Korištenjem ove funkcije prijavljeni korisnici mogu trenutno resetovati vlastitu lozinku za svoje račune. Stvorimo datoteku pod nazivom "reset-password.php" i u nju stavimo sljedeći kod.





Klikni na sliku kako bi preuzeo kompletan kod