Jegyzet
Ha már működik a honlapunkon a
regisztráció, akkor
szükségszerűen adódik a bejelentkezés lehetőségének megvalósítása.
Szóhasználat tekintetében picit finomítsunk a dolgon:
- bejelentkezni és kijelentkezni a felhasználó feladata
- bejelentkeztetni (beléptetni) és kijelentkeztetni (kiléptetni) fejlesztőként a mi dolgunk - vagyis az ezt megvalósító programrészt kell megírnunk.
Mitől lesz valaki beléptetve az oldalra?
Mivel a bejelentkezés nem csupán egyetlen lapra, hanem az egész weboldalra (vagyis annak összes lapjára)
történik, ezért úgy kell megvalósítani a bejelentkeztetést, hogy az ehhez eltárolt adatok minden lapon
elérhetőek legyenek. Ez a tény pedig már azonnal meg is adja a fenti kérdésre a választ:
session-változókat
kell használnunk. Legegyszerűbb bejelentkeztetésként tehát a $_SESSION nevű változóba (annak egy elemébe)
be kell írnunk a bejelentkezett felhasználó adatbázisban (regisztrációkor) rögzített user-azonosítóját.
Persze, ha kicsit előrelátóak vagyunk, akkor nemcsak a user-azonosítót tároljuk el, hanem ennél több adatot
is a felhasználóról: például a felhasználónevét (hátha ki kell valahol írni), esetleg e-mail címét, illetve
a státuszát - ez utóbbit különösen akkor, ha ez egyben jogosultságok meghatározását is jelenti számára az
oldal használata tekintetében.
A beléptetés lépései tehát a következők:
1. Kapunk egy felhasználónév (de inkább e-mail cím) illetve jelszó párost az belépési felületről.
2. Megnézzük, hogy a kapott adatok szerepelnek-e az adatbázisban a regisztrált felhasználók között.
3. Ha igen, akkor kiolvassuk az adatbázisból a szükséges adatokat, és a $_SESSION változóba írjuk őket.
Ezt követően már csak annyi a dolgunk, hogy minden oldal elején megvizsgáljuk, van-e írva adat a $_SESSION
megfelelő elemeiben, vagy sem. Ha igen, akkor a belépés utáni képernyőt jelenítjük meg a böngészőben, ha pedig
nem, akkor a belépő felületet mutatjuk.
Mindezek tükrében a programunk alapját az alábbi kódvázlat adhatja:
... session-indítás, adatbázishoz csatlakozás...
$mail = $_POST[mail] ;
$pw = md5( $_POST[pw] ) ;
$userek = mysqli_query( $adb , "
SELECT * FROM user
WHERE umail='$mail' AND upw='$pw'
" ) ;
if( mysqli_num_rows($userek) > 0 )
{
$user = mysqli_fetch_array( $userek ) ;
$_SESSION[uid] = $user[uid] ;
$_SESSION[unev] = $user[unev] ;
$_SESSION[ustat] = $user[ustatusz] ;
...átirányítás a belépés utáni oldalra...
}
else
{
...a belépési adatok hibájára utaló kiírás...
}
A tényleges beléptetés tehát a félkövéren szedett pár sor, ahol a munkamenet-változóba való írás történik.
Honnan fogjuk tudni (az oldal üzemeltetőjeként), hogy mely felhasználónk mikor lépett be?
És egyáltalán: fontos kérdés-e ez valójában?
Ha nem "írjuk fel" magunknak, hogy ki mikor lépett be az oldalunkra, akkor igazából fogalmunk sem lesz
róla, mi történik a saját weboldalunkon. Nem fogjuk tudni, kik a leghűségesebb látogatóink, kik azok
csak egyszer léptek be, illetve kik azok, akik már nagyon rég óta nem is jártak nálunk. Ha pedig ez így
lenne, akkor igazából azt sem tudnánk, mennyire sikeres az oldalunk, min érdemes dolgoznunk - illetve
egyáltalán: érdemes-e fejlesztenünk.
Persze, az igazán korrekt megoldás az lehet, ha minden egyes oldalmegtekintést adatbázisba jegyzünk,
eltárolva azt is, hogy mely belépett látogatónk nézte meg az adott tartalmat, az egyszerűség kedvéért
most még maradjunk annál a megoldásnál, hogy csak a belépéseket naplózzuk. Ehhez kell készítenünk egy
adatbázistáblát - pl.
login néven -, az alábbihoz
hasonló szerkezettel:
lid N 11 login azonosító (elsődleges kulcs)
uid N 11 belépett user azonosítója
ldatum DT a belépés időpontja
lip N 32 a belépéshez használt eszköz IP-címe
lsess C 8 a session-azonosító első néhány karaktere
Ha ez megvan, akkor a fentebb vázolt forráskódot ki kell egészíteni azzal, hogy a belépéskor írjunk
egy új sort a login táblába az eltárolandó tartalmakkal. Innentől visszamenőleg is tudni fogjuk, ki
mikor, hányszor lépett be, vagy éppen mióta nem lépett be az oldalunkra. (Továbbra is érdemes azonban
hangsúlyozni, hogy ennek a megoldásnak egy továbbfejlesztett változatában minden oldallátogatást is
naplózhatunk, ami gyakorlatilag szükségtelenné teheti a belépések naplózását, hiszen az oldallátogatások
feljegyzése alkalmával a látogató user azonosítóját is eltárolhatjuk.)
Mi történik a beléptetés után?
Mivel alapszabály, hogy a weboldalunk minden oldalát az index.php kezdőfájlon keresztül, a megfelelő
paraméterezés megvalósításával töltünk be, ezért belépés után a teendő az index.php újratöltése. Éppen
ezért az index.php-nek tartalmaznia kell egy feltételt, ami eldönti, hogy be van-e már lépve a látogatónk,
vagy még nincs, és ennek megfelelően vagy a belépő formot, vagy a belső tartalmat kell megjelentenie,
valahogy így:
session_start() ;
include("fejlec.php") ;
if( $_SESSION[uid] != "" ) include("belsooldal.php") ;
else include("login_form.php") ;
include("lablec.php") ;
Hogyan valósul meg a kiléptetés?
Ha a beléptetést a session-be való írás jelentette, akkor a kiléptetést a session törlésével
lehet megvalósítani. Az alábbi néhány programsornak a "Kilépés" gomb megnyomásának hatására
kell lefutnia.
session_start() ;
session_destroy() ;
...index.php újratöltése...
Feladat
A korábbi
Regisztráció folytatásaként készítsen beléptető
felületet, és oldja meg, hogy megfelelő e-mail cím illetve jelszó megadása után a felhasználó
csakugyan a belső képernyőn találja magát.
A belső képernyőn listázza ki a felhasználó számára az eddig regisztrált felhasználók neveit
és az utolsó belépésük időpontját. Ha valaki még sosem lépett be, akkor őket a lista végén
szerepeltesse, az időpont helyén a "még sosem lépett be" szöveggel.
A belső képernyőn gondoskodjon a kilépés lehetőségéről.