• Nem Talált Eredményt

III. Alkalmazások fejlesztése adatbázisokhoz 134

21.2. Sütik és munkamenetek

feldol-gozó függvényekre a külső adat bekötését. Ezekre a megoldásokra nem hoztunk itt példát, mert a sérülékeny, érzékeny kódrészleteket szeret-tük volna itt bemutatni, de az alkalmazásfejlesztésről szóló fejezetben megmutatjuk, hogyan kell ezeket megvalósítani Java-ban és PHP-ben (lásd 23. és 24. fejezet).

21.2. Sütik és munkamenetek

A sütik- és munkamenetek kezelését illetően jelen tananyagon belül csak részlegesen foglalkozunk, ugyanis ez a témakör inkább a rendszerfejlesztés valamint a webes alapú alkalmazásfejlesztés témaköréhez kapcsolódik szoro-sabban, de szemléletformáló szándékkal fontosnak tartjuk az itt leírtakat. Az Olvasó ebben az alfejezetben azt tanulhatja meg, hogy adatbázisokkal hogyan támogathatja a munkamenetek és sütik kezelését. Azzal, hogy az Olvasó nem csupán az alkalmazás szintjén kezeli a munkameneteket, fontos előrelépést tesz az általa fejlesztett adatbázisok és adatok biztonsága érdekében.

A munkamenetek (sessions) kezelése elengedhetetlenül fontos a mai we-bes alkalmazásfejlesztésben. A legtöbb wewe-bes alkalmazásfejlesztésre használt nyelv, – mint például a PHP is – támogatja a munkamenetek kezelését. A munkamenet kezelés lényege, hogy a felhasználó a weboldalon végzett te-vékenységeit munkamenetként tartjuk nyilván. A munkameneteket létrehoz-hatjuk akkor, amikor a felhasználó meglátogatja az oldalt, vagy amikor belép egy webes felületű rendszerbe. A lépéseit, adatait munkamemenet változók-ban a webszerver tárolja. A munkamenet-változókváltozók-ban tárolt adatokat hasz-nálhatjuk arra, hogy navigáljuk őt az oldalon, tegyünk elérhetővé számára új űrlapokat, felületeket. A munkamenetek létrehozásakor a rendszer minden munkamenethez egy új munkamenet azonosítót rendel, amelyet a szerveren tárol. A munkamenet során az alkalmazás eltárolhat bizonyos információkat ehhez a munkamenet-azonosítóhoz, például, hogy milyen oldalon állunk ép-pen, és ezen információ alapján felkínálhat a rendszer olyan lehetőségeket, hogy milyen oldalakra mehetünk tovább.

21.2.1. példa

Mindenki számára ismerős lehet az a példa, amikor az interneten vásá-rolunk. Belépünk a webshop oldalára, ekkor elindíthatunk egy munka-menetet. A munkamenet-azonosítóba eltárolhatjuk a felhasználói azo-nosítónkat, így a továbbiakban nem kell minden alkalommal azonosíta-nunk magunkat. Böngészünk az áruház terméklistájában, kiválasztjuk

a megvásárolni kívánt termékeket és megyünk a „pénztárhoz” fizetni.

Azt, hogy mi elindítjuk a fizetés folyamatát (és a „pénztár” oldalára lépünk) eltárolhatjuk a munkamenet-változókban is. Innen a rendszer fel fogja ajánlani, hogy a következő lépésben adjuk meg a számlázási és szállítási címünket. Ha erre az oldalra lépünk, akkor munkamenet változókban megjegyezheti a címeket, a termékeket és megjelenít egy oldalt, hogy a fizetés és a tényleges vásárlás előtt tekintsük át ezeket az adatokat, majd ha jóváhagytuk, akkor továbbléphetünk a fizetési felületre és ekkor ténylegesen adatbázisba is eltárolható a rendelésünk (addig ugyanis bármikor meggondolhatjuk magunkat és tovább vásá-rolhatunk, vagy kivehetjük a terméket a „kosárból”).

A sütik (cookies) is hasonló szerepet játszanak a webes alkalmazásokban, de nem a szerveren, hanem a kliensen tárolják az adatokat. Funkcióikat tekintve hasonlóan használhatóak az adatok tárolására, mint a munkamene-tek.

Hogyan jutnak szerephez az adatbázisok a munkamenetek és a sütik ke-zelésében? Léteznek olyan hálózaton keresztüli támadások, amelyek a mun-kamenetek vagy sütik megszerzésére irányulnak, így a támadó a megszerzett munkamenet azonosítóval a vásárló vagy felhasználó „nevében” tud bizonyos műveleteket végrehajtani. Az adatbázisokkal úgy támogathatjuk a rendszer biztonságát, hogy a felhasználókhoz eltároljuk a munkamenetek azonosítóit és minden egyes alkalommal, amikor új oldalra lép ellenőrizzük, hogy az ér-vényben lévő munkamenet-azonosító megegyezik-e az adatbázisban eltárolt munkamenet-azonosítóval. Ezt a módszert sütik esetében is alkalmazhatjuk.

21.2.2. példa

Tegyük fel, hogy a korábban látott Fórum példát használjuk. A felhasználói felületen a rendszerbe történő belépéshez a felhasználók-nak meg kell adniuk e-mail címüket és jelszavukat. A FELHASZNÁLÓ táblában csak az alábbi adatok vannak eltárolva:

FELHASZNÁLÓ(felhasználónév, jelszó, email, vezetéknév, keresztnév, utolsó_belépés_időpontja)

Vegyünk hozzá fel még egy mezőt sid(=session ID) néven, tehát a FELHASZNÁLÓsémánk az alábbi lesz:

21.2. SÜTIK ÉS MUNKAMENETEK 177

FELHASZNÁLÓ(felhasználónév, jelszó, email, vezetéknév, keresztnév, utolsó_belépés_időpontja, sid)

Amikor a felhasználót hitelesítettük, akkor létrehozunk számára egy munkamenet-azonosítót, amit adatbázis szinten is eltárolunk. Amíg a felhasználó az oldalon tevékenykedik, addig ez a munkamenet-azonosító érvényben marad. Minden esetben, amikor új oldalra lép a felhasználó, a munkamenet-azonosítóit (a webszerveren tároltat és az adatbázisban tároltat) ellenőrizzük. Kilépéskor a munkamenet-azonosítót a szerver-ről töröljük és az adatbázisban az sidmező értékét NULL-ra állítjuk.

Tegyük fel, hogy amíg a felhasználónk tevékenykedik a fórumba va-laki éppen be akar lépni a rendszerbe az „ellopott” felhasználónevé-vel és jelszavával. A bejelentkezés új munkamenet-azonosítót gene-rál a FELHASZNÁLÓK táblába, így amikor a felhasználónk új oldalra lép, nem fog egyezni a webszerveren és az adatbázisban tárolt munkamenet-azonosító. Ebben az esetben célszerű a felhasználót kiléptetni a rend-szerből, megszüntetni a munkamenet-azonosítóját, és értesíteni őt a többszörös bejelentkezésről.

A munkamenet-kezelés tovább bonyolítható, ha minden egyes oldal vál-tás esetén újrageneráljuk a munkamenet-azonosítót, és az adatbázisban is frissítjük azt.

A sütikről és a munkamenetek kezelésének ismertetéséről szóló legfonto-sabb ismereteket említettük meg itt. A webes alkalmazás fejlesztés kapcsán a későbbi fejezetekben még lesz gyakorlati példa is a munkamenetek kezelésére, illetve a téma iránt érdeklődők a szakkönyvekben [5, 20] is utánanézhetnek a részleteknek.

Kérdések és feladatok

1. Mi az SQL befecskendezés?

2. Mit jelent a kötegelt utasítás?

3. Hogyan lehet lekérdezni egy adatbázis-kezelő rendszer verziószámát?

4. Soroljon fel olyan adatbázis-kezelő rendszer-adatokat, amelyekhez ad-minisztrátori jogok szükségesek!

5. Miyen utasítással lehet lekérdezni a táblákat MySQL-ben?

6. Hogyan védekezhetünk az SQL befecskendezések ellen?

22. fejezet

A PHP nyelv

Ebben a fejezetben az Olvasó megismerkedhet a PHP nyelv általános szin-taktikájával, vezérlési szerkezeteivel. Ezek az ismeretek elengedhetetlenül szükségesek a további programkódok megértéséhez.

A PHP nyelvet általában dinamikus weboldalak fejlesztéséhez használják, amikor a tartalom valamilyen bevitt adat vagy pedig felhasználói interakció hatására dinamikusan jön létre. Használható azonban nem webes tartalmú programokhoz is, ekkor a php értelmező program fogja a programkódot ér-telmezni. Ebben a formában ritkábban használják.

Korábban a PHP nyelvben nem valósítottak meg objektum-orientált prog-ramozási lehetőségeket, csak függvényeket lehetett használni, az utóbbi idő-ben, különösen az adatbázis-kezelés kapcsán megjelentek már az objektum-orientált megoldások is.

A PHP nyelvű kódrészletet a <?php ... ?> jelek nyitó- és zárószimbó-lumok közé kell tenni. A szimbózárószimbó-lumok között több programsor, akár teljes program szerepelhet, de olyan kis részletek is, amelyek valamilyen dinamikus tartalmat tartalmaznak. Az utasításokat a ; karakter zárja.

A nyelvben a kis- és nagybetűk különbözőek.

22.1. Adattípusok, változók

A PHP gyengén típusolt nyelv, amely azt jelenti, hogy a változó típusát a benne tárolt érték határozza meg, és újbóli értékadás esetén a típus is megváltozhat.

22.1.1. Adattípusok

A PHP nyelv az alábbi típusokat támogatja:

179

String: Karaktersorozat. A sztringeket egyszeres vagy dupla idézőjelek kö-zött adjuk meg.

Integer: Egész érték -2 147 483 648 és 2 147 483 647 között.

Float(/Double): Lebegőpontos számérték.

Boolean: Logikai adattípus, TRUE és FALSE értéket vehet fel.

Array: Egy változóban több értéket is tud tárolni.

Object: Osztály példány adattagokkal és függvényekkel1. NULL: Speciális adattípus a NULL értékhez.

Resource: Speciális adattípus (függvény-)referenciák tárolására.

22.1.2. Változók

A változókat PHP-ben mindig a $ karakterrel kezdjük. Egy változónak több-ször is adhatunk értéket. A típusát a benne tárolt érték határozza meg.

22.1.3. Konstansok

A konstansokat a define(konstans neve, értéke, kis- és nagybetű különböző-e) függvénnyel hozhatjuk létre. Eléjük nem kell $ dollárjelet tenni. Adefine() függvény harmadik paraméterének alapértelmezett érté-kefalse. Az alábbi kódrészletben létrehozunk egy konstanst, majd az echo utasítással kiírjuk2.

Konstans definiálása

1 <? php

2 d e f i n e( " U D V O Z L O M " , " Ü dv ö zl ö m " ) ;

3 echo U D V O Z L O M ;

4 ? >

1Létezik PHP-ben egystdclassáltalános osztálytípus, amely hasonlít a Java nyelvben találhatóObjectosztályhoz, de ezzel jelen tananyag keretén belül nem foglalkozunk.

2Azechoutasítás webes felület esetén a weboldalra, parancsoros programok esetében pedig konzolra ír.

22.1. ADATTÍPUSOK, VÁLTOZÓK 181 Tömbök

Tömböket az array() függvény segítségével definiálhatunk. Ha tudjuk a tömbök értékeit, akkor ezeket az array() függvényben megadhatjuk felso-rolva, ha csak inicializálni szeretnénk a tömböt, akkor pedig nem kell értéket adnunk az array() függvényben. A PHP-ben csak egydimenziós tömböket tudunk deklarálni, de minden tömb egy cellájában tárolhat tömb típusú érté-ket. Ennek kezelése körülményes a többi programozási nyelvben megszokott többdimenziós tömbökhöz képest. A PHP a tömböket asszociatív tömbként kezeli, vagyis kulcs-érték párokat tárol, ennélfogva nem csak számmal történő folytonos indexelést használhatunk. Ha nem kulcs-érték párt adunk meg a tömb deklarációjánál, akkor 0-tól kezdődően kezdi számozni az elemeket. A tömböket a [] zárójelpárral indexelhetjük. Az alábbi példában bemutatjuk a tömbök kezelését. A kulcs-érték párokat a "kulcs"=>"érték" formában kell megadnunk.

Tömbök deklarálása és indexelése

1 <? php

2 $ t o m b = array( " H é tf ő " , " K e d d " , " S z e r d a " , " Cs ü t ö rt ö k "

, , " P é n t e k " , " S z o m b a t " , " Vas á r n a p " ) ;

3 echo $ t o m b [ 1 ] ; // K e d d

4

5 $ s z e r z o T o m b = array() ;

6 $ s z e r z o T o m b [ ’ a d a t b a z i s o k ’ ] = array( " BP " = > " Dr . Bal á zs , P é ter " , " NG " = > " Dr . N é m e t h G á bor " ) ;

7 echo $ s z e r z o T o m b [ ’ a d a t b a z i s o k ’ ] [ 0 ] ; // Dr . Bal á zs , P é ter

8 ? >

22.1.4. Műveletek

A PHP nyelv műveletei, operátorai nagyon hasonlóak a többi nyelvhez. Ki-vételt képez talán a sztring konkatenáció.

= értékadás

+,-,*,/, **, % összeadás, kivonás, szorzás, osztás, hatvá-nyozás, maradékképzés

== értékre vonatkozó egyenlőség

>, <, <=, >= nagyobb, kisebb, kisebb vagy egyenlő, na-gyobb vagy egyenlő

!=, <> nem egyenlő

=== azonosan egyenlő (például tömböknél)

!== nem azonos érték és típus (például

töm-böknél)

++, −− incrementáció, dekrementáció

+=, -=, /=, %=, **= értékadással összekötött aritmetikai mű-veletek

A PHP nyelvben használt vezérlési szerkezetek szintaxisa hasonlít más nyel-vek (például C és Java) szintaxisára.

22.2.1. Feltételes vezérlés

A feltételes ellenőrzésnél a feltétel teljesülése esetén a blokkon belüli prog-ramrészlet végrehajtódik. Több feltételes eset esetén az első teljesülő feltétel blokkjában lévő programrészlet hajtódik végre. Ha egyik feltétel sem teljesül és van else-ág, akkor annak blokkjában szereplő kódrészlet hajtódik végre.

Feltételes vezérlés