Dakle, evo jednog resenja koje jako dobro radi. Koriste se sesije.
Prvo, imamo stranicu index.php koja ima formu za logovanje:
<table>
<form action="login.php" method="post">
<tr>
<td colspan="2" align="center"><h1>Login</h1>
</td>
</tr>
<tr>
<td>Username:</td><td><input type="text" name="username"></td>
</tr>
<tr>
<td>Password:</td><td><input type="password" name="password"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="Submit"></td>
</tr>
</form>
</table>
Pre svih html naredbi treba ubaciti sledeci php kod:
session_start();
$_SESSION ['ok'] = -1;
Kako bi se ponistila neka prethodna sesija.
Form vodi na login.php i taj file bi trebalo da ima sledeci kod na startu:
<?php
session_start ();
// ucitavanje konfiguracije za mysql, smarty i globalnih promenljivih
require ( "includes/config.php" );
if ( empty ( $_SESSION['ok'] ) or $_SESSION ['ok'] != 1 ) {
// ovde se dolazi ukoliko ne postoji valinda sesija (proveravaju se podaci sa login forme)
// prihvatanje parametara sa forme
if ( empty ( $_POST ['username'] ) || empty ( $_POST ['password'] ) ) {
print "Greska bla bla......";
die;
}
$username = $_POST ['username'];
$password = $_POST ['password'];
if ( !ereg ( "[a-z]([a-z0-9_])*", $username )) {
// username nije u propisnom formatu
// username sme da sadrzi samo slova, cifre i _ i pocinje slovom
// OVO SAM NAKNADNO UBACIO, NIJE TESTIRANO PA PROVERITI SINTAKSU
print "Greska bla bla......";
die;
}
$data = mysql_query ( "select * from users where username='$username';", $db )
or die ( "<p><b>Greska prilikom izvrsavanja upita: </b><br><b>GRESKA:</b> " . mysql_error() );
if ( mysql_num_rows ( $data ) == 0 ) {
// znaci da nemamo takav user u bazi
// neka obrada greske bla bla....
die;
}
if ( $password != mysql_result ( $data, 0, "password" ) ) {
// pass nije ok
// podrazumevam da pass nije kriptovan, nema velike razlike i da jeste
// opet obrada greske bla bla....
die;
} else {
//ako se ovde dodje znaci da je logovanje ok
// setuje se da je sesija ok
// mogu se cuvati username ili neki drugi potrebni podaci
$_SESSION ['ok'] = 1;
$_SESSION ['userid'] = mysql_result ( $data, 0, "ID" );
}
}
// prikaz podataka
print "bla bla, login je ok!";
?>
Sad je ostalo da se na svakoj stranici koja treba da bude zasticena proverava da li postoji validna sesija. Dakle, na pocetku svake strane treba da postoji sledeci php kod:
<?php
//provera da li je administrator ulogovan
session_start ();
// ucitavanje konfiguracije za mysql, smarti i globalnih promenljivih
require ( "includes/config.php" );
if ( empty ( $_SESSION ['ok'] ) or $_SESSION ['ok'] != 1 ) {
header("Location: http://" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . "/" . "index.php");
die;
}
?>
Ovaj kod preusmerava na stranicu za logovanje svakog klijenta koji pokusava da otvori stranicu direktnim pozivom bez logovanja.
Nadam se da je sve jasno, tu su komentari pa nisam davao mnogo objasnjenja sa strane. Jos samo napomena da ovde koristim bazu za cuvanje podataka o korisnicima. Moguce je da se radi za samo jednog korisnika i onda je deo za proveru user/pass-a malo drugaciji, ali mislim da nije problem da se to izmeni, a ako jeste postavite pitanje ovde.
|