Session, azaz munkamenetkezelés PHP-ban (Munkamenet indítása, session változók létrehozása, munkamenet megszűntetése)
Ebben a PHP leckében bemutatjuk a session-öket, azaz a munkameneteket. Valószínűleg már mindenki hallott arról a kifejezésről, hogy munkamenet, most egy kicsit mögé nézünk, bemutatjuk, hogy mi is ez pontosan és azt, hogy hogyan kell létrehozni egy munkamenetet, session-t PHP-ban, illetve azt is, hogy hogyan kell törölni azt.
Mi az a session, munkamenet?
A HTTP protokoll egy állapotmentes protokoll, amely azt jeleneti, hogy két kérés között a webszer képtelen kapcsolatot teremteni. Ebből kifolyólag következik az, hogy ha egy weboldalon belül átkattintunk egy másik aloldalra, cikkre, bármire, akkor egy teljesen új kapcsolat keletkezik. Egy újabb kattintásnál pedig egy újabb kapcsolat. A HTTP protokoll ezen tulajdonságának az a következménye, hogy ha egy felhasználó elkezd barangolni a weboldalunkon, akkor a szerver alapvetően nem fog tudni róla, hogy ez ugyanaz a felhasználó vagy egy másik.
A HTTP ezen hiányosságát tudjuk áthidalni a PHP session-jével, hiszen segítségével információt tárolhatunk egy felhasználóra vonatkoztatva, mely az egész weboldalon érvényes lesz.
Egy munkamenet csak addig él, amíg a felhasználó be nem zárja a böngészőt.
Munkamenet indítása PHP-ban (session start)
Ahhoz, hogy a PHP-ban munkameneteket tudjunk kezelni, először el kell indítanunk, vagy kezdenünk egy sessiont. Ezt az alábbi szintaktikát követve tehetjük meg.
Szintaxis
session_start();
Ez létrehoz egy „$_SESSION” nevű globális változót. Ebbe kell elhelyeznünk majd a munkamenethez szükséges adatokat.
Példa session használatára PHP-ban
PHP kód
<?php
session_start(); // munkamenet indítása
?>
Code language: HTML, XML (xml)
Egy session elindítása pontosan ennyiből áll, se többől, se kevesebből. Egy munkamenet indításnak nincs szemmel látható következménye a weboldalon.
Adatok elhelyezése a PHP session-ben, munkamenetben PHP nyelven
Miután elindítottunk egy munkamenetet a PHP-ban, el kell helyeznünk benne valamilyen adatot. Fentebb írtunk a „$_SESSION” globális változóról. Ez lesz a segítségünkre, hiszen ebbe tudjuk elhelyezni a munkamenet során tárolandó adatokat.
Szintaxis
$_SESSION["VÁLTOZÓNÉV"] = ÉRTÉK;
Code language: PHP (php)
A globális változóba való adatelhelyezés körülbelül ugyanolyan egyszerű, mint, ha egy sima változóba tennénk adatokat. Előszőr meghatározzuk, hogy mibe ($_SESSION[„VÁLTOZÓNÉV”]), majd azt, hogy mit (ÉRTÉK) teszünk.
Példa adatelhelyezésre $_SESSION globális változóba PHP nyelven
PHP kód
<?php
session_start(); // munkamenet indítása
$_SESSION["nev"] = "László"; // munkamenet "nev" változójába beleraktuk a "László" értéket
?>
Code language: HTML, XML (xml)
A fenti példának sincs szemmel látható eredménye. Először létrehoztuk a munkamenetet, majd létrehoztunk egy „nev” változót a session-ön belül.
PHP munkamenet, session változó értékének felhasználása
Ugyebár azt mondtuk, hogy a munkamenetekre azért van szükség, hogy egy weboldal különböző aloldalain keresztül is tudjuk követni a felhasználót. Például, ha az egyik aloldalon megadja a nevét, akkor a következő aloldalra a HTTP ne felejtse el. Egy bekezdéssel feljebb bemutattuk, hogy hogyan kell adatokat elmenteni a munkamenet változójába, most megmutatjuk, hogy hogyan kell adatot kivenni belőle.
Szintaktika
$_SESSION["VÁLTOZÓNÉV"]
Code language: PHP (php)
Ugyanúgy kell tennünk, mint egy sima változó esetében, szimplán hivatkozunk a nevére. Ha kiszeretnénk íratni, akkor megtehetjük egy echo-val vagy print-tel. De akár egy feltételvizsgálatot is végrehajthatunk vele.
Példa session változó értékének a kiíratására
PHP kód
<?php
session_start(); // munkamenet indítása
$_SESSION["nev"] = "László"; // munkamenet "nev" változójába beleraktuk a "László" értéket
echo $_SESSION["nev"]; // kiíratjuk a munkamenet "nev" változóját
?>
Code language: HTML, XML (xml)
Eredmény
László
Szimplán kiechozzuk a „$_SESSION” globális tömb „nev” indexű elemét.
$_SESSION összes adatának kiíratása
Ha nem csak konkrétan egyetlen egy munkamenetadatot szeretnénk kiíratni, hanem az összeset, akkor azt is megtehetjük.
Szintaktika
var_dump($_SESSION)
// vagy
print_r($_SESSION)
Code language: PHP (php)
A „var_dump” és a „print_r” segítségével is kiírathatjuk a $_SESSION tömb összes elemét.
Példa $_SESSION globális tömb összes elemének kiíratására
PHP kód
<?php
session_start(); // munkamenet indítása
$_SESSION["nev"] = "László"; // munkamenet "nev" változójába beleraktuk a "László" értéket
$_SESSION["eletkor"] = 23; // munkamenet "eletkor" változójába beleraktuk a "23" értéket
$_SESSION["nem"] = "férfi"; // munkamenet "nem" változójába beleraktuk a "férfi" értéket
var_dump($_SESSION); // kiíratjuk a munkamenet összes változóját
?>
Code language: HTML, XML (xml)
Eredmény
array(3) {
[„nev”]=> string(8) „László”
[„eletkor”]=> int(23)
[„nem”]=> string(6) „férfi”
}
A var_dump() szépen kilistázza a $_SESSION globális változó összes elemét.
PHP munkamenet változójának módosítása
Vannak olyan esetek, amikor a felhasználó módosít valamit, amit mi már eltároltunk a session-be. Természetesen ilyenkor arra is van lehetőség, hogy a munkamenet egy létező változóját felülírjuk.
Szintaktika
$_SESSION["VÁLTOZÓNÉV"] = ÉRTÉK;
Code language: PHP (php)
A felülírás ugyanúgy történik, mintha egy új elemet hoznánk létre a munkamenet globális tömbjében.
Példa munkamenet változójának felülírására PHP-ban
PHP kód
<?php
session_start(); // munkamenet indítása
$_SESSION["nev"] = "László"; // munkamenet "nev" változójába beleraktuk a "László" értéket
echo "Előtte: " . $_SESSION["nev"]; // kiíratjuk a munkamenet "nev" változóját
$_SESSION["nev"] = "Petra"; // munkamenet "nev" változójába beleraktuk a "Petra" értéket
echo "<br>Utána: " . $_SESSION["nev"]; // kiíratjuk a munkamenet "nev" változóját
?>
Code language: HTML, XML (xml)
Eredmény
Előtte: László
Utána: Petra
Az 5. sorban egyszerűen felülírjuk a $_SESSION[„nev”] jelenlegi értékét egy újjal.
PHP session megszűntetése, munkamenet befejezése
Végül lehetőségünk van arra is, hogy a session változóit eltávolítsuk és megszűntessük a munkamenetet.
A munkamenetet nem kell megszűntetni minden oldalon! Megfontoltan használjuk ezt a lehetőséget, például, ha kijelentkezik a felhasználó.
Szintaxis
session_unset();
session_destroy();
A „session_unset()” eltávolítja az összes munkamenet változót, míg a „session_destroy()” megsemmisíti, azaz megszűnteti a munkamenetet. Mind a kettőt célszerű használni.
Példa session, munkamenet megszűntetésére
PHP kód
<?php
session_start(); // munkamenet indítása
$_SESSION["nev"] = "László"; // munkamenet "nev" változójába beleraktuk a "László" értéket
echo "Törlés előtt: " . $_SESSION["nev"]; // kiíratjuk a munkamenet "nev" változóját
session_unset(); // session változók eltávolítása
session_destroy(); // munkamenet megszűntetése
echo "<br>Törlés után: " . $_SESSION["nev"]; // kiíratjuk a munkamenet "nev" változóját
?>
Code language: HTML, XML (xml)
Eredmény
Törlés előtt: László
Törlés után:
Az eredményből láthatjuk, hogy a törlés előtt még létezik a munkamenetünk „nev” változója, de a két session megszűntető függvény kiadása után már nincs értéke.