Jednoduché prihlasovanie, registrácia užívateľov

Prejdime priamo k veci. Vytvoríme si v databáze tabuľku ‘uzivatelia’:

CREATE TABLE `uzivatelia` (
  `id` int NOT NULL auto_increment primary key,
  `meno` tinytext NOT NULL,
  `heslo` tinytext NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8
COLLATE=utf8_slovak_ci AUTO_INCREMENT=1;

ID bude primárny kľúč a budeme s ním môcť identifikovať jednotlivých užívateľov. Stĺpec ‘meno’ bude obsahovať vždy nick užívateľa a ‘heslo’ bude obsahovať heslo uvedené pri registrácii v zašifrovanej podobe. Heslo budeme “šifrovať” tak, že určeným hashovacím algoritmom vypočítame hash hodnotu hesla, ktorú uložíme do databáze a pri prihlasovaní len overíme, či prihlasovacie heslo (teda tiež jeho zašifrovaná hodnota) zodpovedá tej uvedenej pri registrácii, uloženej v databáze.

Najprv si zhotovíme jednoduchú registráciu (upozorňujem, že v tomto článku sa nezaoberám filtrovaním vstupu a nezapezpečujem svoj kód; účel článku je úplne iný) . Formulár budeme mať v súbore, ktorý pomenujeme napríklad registracia.html . Kód je nasledovný…

<h2>Registrácia</h2> 

<form action="registracia.php" method="post">
<p>Meno: <input type="text" name="meno"/></p>
<p>Heslo: <input type="password" name="heslo"/></p>
<p><input type="submit" /></p>
</form>

Teraz si napíšeme súbor, ktorý spracuje požiadavok z registračného formulára a pomenujeme ho registracia.php . Kód…

<?php
// deklarujeme si vstupne premenne
$meno = $_POST['meno'];
$heslo = sha1($_POST['heslo']); # sha1 je hashovacia f-cia. Viac na php.net

mysql_query("INSERT INTO uzivatelia(meno,heslo) VALUES('$meno','$heslo' )")
or die("Užívateľa sa nepodarilo registrovať.");
?>

Týmto sme vyriešili registráciu (odfiltrovanie nebezpečného vstupu a iné bezpečnostné veci nechám na vás). Teraz by sme si mohli spraviť prihlasovací dialóg. Keď užívateľ zadá platné meno a zodpovedajúce heslo, jeho status (pomocou SESSION) sa zmení na ‘prihlásený’. V inom prípade sa zobrazí škaredá hláška, že zadal neplatné údaje.

Kód prihlasovacieho dialógu login.html:

<h2>Prihlásenie</h2>
<form action="login.php" method="post">
<p>Prihlasovacie meno: <input type="text" name="meno"/></p>
<p>Prihlasovacie heslo: <input type="password" name="heslo"/></p>
<p><input type="submit" value="Prihlásiť" /></p>
</form>

Súbor login.php obsahuje nasledujúci kód…

<?php
// deklarujeme uzivatelsky vstup
$meno = $_POST['meno'];
$heslo = sha1($_POST['heslo']); # ziskame heslo v sifrovanej podobe

// ziskame heslo pre urcene meno
$result = mysql_query("SELECT heslo FROM uzivatelia WHERE meno='$meno'");
$row = mysql_fetch_row($result); // v $row[0] je ulozene heslo

// overime spravnost hesla
if($heslo == $row[0])
{
	$_SESSION['prihlaseny'] = 'ano';
}
else
{
	echo "Zadali ste neplatné meno alebo heslo!";
}
?>

Ak sa užívateľ úspešne prihlásil, môže pristupovať na stránky, ktoré zabezpečíme týmto kódom (vkladajte pred chránený kód):

<?php
if($_SESSION['prihlaseny'] != 'ano')
	die("Nepovolený vstup! Najprv sa prihláste.");
?>

Pred použitím SESSION budeme musieť použiť direktívu session_start() na začiatku dokumentu. Popis hashovacích funkcií a teóriu šifrovania skúsim rozobrať v samostatnom článku. Ale zásadné pravidlo, ktoré platí pri vývoji webových aplikácií, je bezpečnosť. Nezabezpečená webová aplikácia s citlivými dátami môže narobiť viac škody, než žiadna.

Cieľom tohto článku bolo vysvetliť princípy registrácie a následného prihlasovania užívateľov za využitia SESSIONs. Aby bol článok úplný, pridávam kód, ktorý spôsobí odhlásenie užívateľa. Stačí, ak pridáte kdekoľvek na stránku odkaz v tvare:

<a href="logout.php">Odhlásiť užívateľa</a>

a súbor logout.php bude obsahovať tento kód…

<?php
unset($_SESSION['prihlaseny']); // znicime zaznam o prihlaseni
?>

Páčilo sa? Daj o článku vedieť svetu!

  • Jagg.cz
  • Linkuj.cz
  • Digg
  • del.icio.us
  • Facebook
  • Twitter
  • Technorati
  • LinkedIn
  • MySpace
  • email
  • Print
  • PDF
  • Add to favorites
  • pošli na vybrali.sme.sk

Súvisiace články


Kategória: PHP, MySQL | 1,790 zobrazení Author: Michal Tomanóczy