Ahogy a weboldal egyre szofisztikáltabb lesz, a kódnak is lépést kell tartania. Amikor a weboldal olyan fázisba jut, ahol felhasználói adatokat kell továbbítani az egyik oldalról a másikra, érdemes elgondolkodni a PHP-szessziók használatán.
Egy normál HTML-weboldal nem továbbít adatokat az egyik oldalról a másikra. Vagyis minden információt elfelejt, amint egy új oldalt töltünk be. Ez gondot okoz az olyan funkciók alkalmazása során, mint például a kosár, melynek működéséhez fontos, hogy ezek az adatok (például a kiválasztott termék) megmaradjanak, akkor is, ha a felhasználó új oldalra lép.
PHP-szessziók — áttekintés
A PHP-szessziók megoldják a fent említett gondot, hiszen lehetővé teszik, hogy az információk megőrződjenek a szerveren a későbbi használat érdekében (pl. felhasználónév, kosárba tett termékek stb.). A szesszióinformációk ideiglenesek, és általában röviddel azután törlődnek, hogy a felhasználó elhagyja a weboldalt.
Fontos elgondolkodni azon, hogy a szessziók megfelelnek-e a weboldal igényeinek. Azokban az esetekben, amikor hosszan tartó adattárolásra van szükség, más megoldást kell keresni — ilyen megoldást nyújtanak például a MySQL adatbázisok.
A szessziók úgy működnek, hogy egyedi azonosító számot (UID) hoznak létre minden látogató számára, és a változókat ez alapján az ID-szám alapján őrzik. Ez segít abban, hogy két felhasználó adatai ne keveredjenek össze, ha azonos weboldalra látogatnak.
Megjegyzés: Ha nem vagy jártas a szessziók alkalmazásában, nem tanácsoljuk, hogy szessziókat használj egy olyan weboldalon, amelynél magas fokú biztonság szükséges.
PHP-szessziók — hogyan kezdj hozzá?
Mielőtt még elkezdhetnéd szesszióba gyűjteni a felhasználói adatokat, el kell indítanod az első szessziót. A szesszió indításának a kód legelején kell lennie, mielőtt bármilyen HTML vagy szöveg el lenne küldve.
Mutatunk egy egyszerű scriptet, melyet a PHP-kód elejére kell helyezni, hogy megkezdjük a PHP-szessziót.
PHP-kód:
<?php
session_start(); // kezdd meg a PHP-szessziót!
?>
Ez az apró kódrészlet regisztrálja a felhasználó szesszióját a szerveren, és lehetővé teszi, hogy egy egyedi azonosító szám legyen a felhasználó szessziójához rendelve, és megkezdődjön a felhasználói adatok mentése.
A szesszióváltozó elmentése
Amikor szeretnénk megőrizni a felhasználói adatokat egy szesszióban, használhatjuk a $_SESSION asszociatív tömböt. Ez az a hely, ahol őrizzük, és ahonnan lekérjük a szesszió adatait. A PHP korábbi verzióiban más módok is voltak erre, de a frissítéseknek köszönhetően ma már ez a helyes megoldás.
PHP-kód:
<?php
session_start();
$_SESSION['views'] = 1; // szessziós adatok mentése
echo 'Pageviews = ' . $_SESSION['views']; // adatok lekérése
?>
Megjelenítés a böngészőben:
Pageviews = 1
Ezzel a példával bemutattuk, hogyan tudjuk elmenteni a változót a szesszió asszociatív tömbjébe, és hogyan tudjuk lekérni az adatokat ugyanebből a tömbből.
Az isset funkció használata
Most, hogy megtanultuk a $_SESSION tömb használatát, rátérhetünk a szessziók valódi funkcionalitására. Ha létrehozunk egy változót, és egy szesszióban őrizzük meg, feltételezhető, hogy szeretnénk használni is valamikor a jövőben. Mielőtt azonban használnánk egy szessziós változót, feltétlenül le kell ellenőrizni, hogy létezik-e már!
Itt kerül képbe a PHP isset funkciója. Az isset egy olyan funkció, amely bármilyen változóról meg tudja állapítani, hogy be van-e állítva, vagyis van-e már hozzárendelve érték.
Az előző példánk segítségével létrehozhatunk egy nagyon egyszerű számlálót, mely bemutatja, hányszor nyitották meg az oldalunkat. Az isset funkciót fogjuk használni arra, hogy ellenőrizzük, létre lett-e már hozva a pageview változó. Ha igen, akkor növeljük a számlálót, ha nem, akkor pedig létrehozzuk, és az értékét 1-re állítjuk.
PHP-kód:
<?php
session_start();
if (isset($_SESSION['views'])) {
$_SESSION['views'] = $_SESSION['views'] + 1;
}
else {
$_SESSION['views'] = 1;
}
echo 'views = ' . $_SESSION['views'];
?>
Az első alkalommal, amikor lefuttatjuk ezt a scriptet egy frissen megnyitott böngészőben, az if állítás hamis lesz, mert még nincs elmentve egy szessziós változó sem (views). Ha viszont frissítjük az oldalt, az if állítás már igaz lesz, és a számláló növekszik. Minden alkalommal, amikor újraindítjuk a scriptet, a számláló egy megtekintéssel növekszik.
A szesszió törlése és megsemmisítése
A szesszió adatai ideiglenesek, és nem feltétlenül szükséges tisztítanunk magunk után, de bizonyos esetekben szükség lehet arra, hogy kitöröljük az adatokat. Például, ha a vásárlás után szeretnénk kiüríteni az ügyfél kosarát.
PHP-kód:
<?php
session_start();
if (isset($_SESSION['cart'])) {
unset($_SESSION['cart']);
}
?>
A szesszió akár teljesen meg is semmisíthető:
PHP-kód:
<?php
session_start();
session_destroy();
?>
A session_destroy funkció újraindítja a szessziót, ezért csak akkor tanácsos használni, ha nem baj, hogy elveszik az összes szessziós adat.
Jó gyakorlást!
Nyereményjáték
Rovatunk elsődleges célja, hogy közelebbről is bemutassa a legismertebb webtechnológiákat. Azok között az olvasók között, akik minden héten követik rovatunkat, azaz velünk tanulják a programozás alapjait és kitöltik a feladatsort, a sorozat végén egy laptopot sorsolunk ki.
A játék heti kérdése:
Néhány szó rólunk:
Az ErdSoft (www.erdsoft.com) 2011-ben alakult meg. Csapatunkat a fiatalos lendület, a szakértelem, a folyamatos tanulás és tapasztalatgyűjtés jellemzi. Ügyfeleinknek igyekszünk teljes körű szolgáltatást nyújtani — bátran fordulhatnak hozzánk, legyen szó webfejlesztésről, alkalmazásokról, SEO-optimalizálásról, grafikai tervezésről, marketingről vagy szövegírásról. Csapatunk sikerét mi sem bizonyítja jobban, mint a több száz elkészült weboldal és a számos elégedett ügyfél Szerbiában, Magyarországon és az Egyesült Királyságban.