offline
- Blood
- Ugledni građanin
- Pridružio: 26 Jul 2003
- Poruke: 384
- Gde živiš: Beograd
|
Izvini sto se ranije nisam javio, imao sam posla.
Evo detaljnog objasnjenja, prvo cu ti postovati ti objasniti uopsten princip kako se to radi, pa cu ti onda postovati kod koji sam napravio pre dosta vremena, koji i dan danas koristim u svojim aplikacijama pa cu ga onda detaljno i objasniti.
Prvo moras da iskonstruises bazu. U bazi ces cuvati podatke onoga preko cega zelis da vrsis proveru(username, password, mail, itd itd). ja cu za primer uzeti usernam i password posto je najcesce koriceno po netu.
Znaci baza bi imala polja uid, uname, pass
Drugo sta ti je potrebno je da napravis login formu(to ne moram da objasnjavam - ako ipak moram, reci pa cu naknadno objasniti)
Sledece sta je potrebno je da napravis neku f-ju koaj ce proveravati da li su podaci unetu u tu formu ispravni
i na kraju ti treba login i logout stranica(moze jedna za oboje)
Sada, kad sam ti rekao sta je sve potrebno, ajde da se bacimo na kod.
ZNaci kada neko upise svoj uname i pass u formu, bacas ga na login.php stranicu koja izgleda ovako nekako:
if(isLoggedIn()) {
header("Location: index.php");
} else {
// if typed username and password, checking with database if typed user exist //
if($_POST['submit'] == 'Login!') {
$res = mysql_query("SELECT `uid` FROM `users` WHERE `uname`='".$_POST['uname']."' AND `pass`='".$_POST['pass']."';") or die(mysql_error());
$row = mysql_num_rows($res);
if ($row == 1) {
setcookie('name', $_POST['name'], time()+86400, '/');
setcookie('pass', $_POST['pass'], time()+86400, '/');
header("Location: index.php");
} else {
// if username or password are wrong, displaying error message //
alert('<p>Wrong username or password!</p>');
echo parseTemplate("login.tpl");
}
} else {
echo parseTemplate("login.tpl");
}
}
eh sada, objasnjenje ovog koda.
if(isLoggedIn()) {} proverava da li postoje upisani cookie sa usernameom i passwordom i ako postoje, da li oni postoje u bazi - to je ujedno i f-ja o kojoj sam pricao ranije, njen kod cu postaviti posle, ako ne postoje, parsuje se template sa login formom(ti umesto moje f-je za parse template mozes staviti html kod ili mozes koristiti svoj neki template system), ako postoje, redirektuje ga na index.php. e sada, ako je neko vec prosao ovaj deo proveravanja, i pokazala mu se forma za login i ukucao podatke za login, onda se izvrsava onaj deo koda if($_POST['Login']) {} to znaci da je neko kliknuo da dugme sa imenom Login. i onda se vrsi provera u bazi da li taj korisnik postoji, ako postoji, u cookie-e se upisuju vrednosti za username i password(ovo nije bas najsigurnija varijanta, kasnije cu obajsniti kako napraviti sigurniju varijantu od ovog primera ili kako napraviti na drugi nacin login system) i korisnik se redirektuje na index.php a ako ne poziva se f-ja alert koja je u stvari obicna variabla gde ispisuje da je pogresan username i password zajedno sa stranicom gde je login forma.
time()+86400 je vreme koliko ce cookie trajati i ujedno koliko dugo korisnik nece morati ponovo da se loguje. 86400 je jedan dan.
eh sada, sada nam treba kod za f-ju isLoggedIn(), a on izgleda ovako:
function isLoggedIn() {
$res = mysql_query("SELECT `uid` FROM `users` WHERE `uname`='".$_COOKIE['name']."' AND `pass`='".$_COOKIE['pass']."';") or die(mysql_error());
$row = mysql_num_rows($res);
mysql_free_result($res);
return ($row == 1) ? true : false;
}
Znaci on proverava kao sto sam vec rekao da li je u cookie upisan username i password i da li se to sto je upisano u cookie poklapa sa onim sto je upisano u bazu. Ako jeste f-ju vraca true, ako nije vraca false.
Sada kada smo i to objasnili, ostaje da objasnim logout.php i index.php
index.php je vrlo jednostavan.
if(isLoggedIn()) {
// ovde ide dozvoljeni sadrzaj
} else {
header("Location: login.php");
}
mislim da je ovo sasvim jasno
i logout je kod koji brise cookie:
setcookie('name', '', time()-86400, '/');
setcookie('pass', '', time()-86400, '/');
header("Location: login.php");
E sada, ovaj kod nije narocito siguran jer nije zasticen od sql injections-a, tutorijal kako da se zastitis mozes da nadjes na mom blogu, isto tako nije siguran jer cuvas vazne podatke u cookie-u, ali oni mogu da se kriptuju ili hashuju pa ni to nije problem, drugi nacin kako moze da se napravi login je da podatke cuvas u session-u, ali onda ti je user ulogovan samo dok surfa, posle toga nije.
Za pravljenje ovih login-a postoji milion nacina, ja sam ti jedan detaljno objasnio, a drugi ti nagovestio kako da ga napravis.
Ako te jos nesto zanima, slobodno pitaj.
Pozdrav!
|