Munkamenet kezelés PHPban
Írta: Tupacko | 2007. augusztus 19. | kategóriák: Adattárolás, Biztonság, PHP, ProgramozásA munkamenetek (angol: session) hasonlóak a többeközt JavaScriptből is ismert sütikhez (cookies). A feladatuk adatok tárolása a háttérben, így példáúl a felhasználó belépséi adatai. Azonban egy nagy különbség a sütik és a munkamenetek közt, hogy míg a sütik a böngésző személyi számítógépén vannak tárolva (így nem biztonságos), addig a munkametek a szerver oldalon találhatóak. Minden böngésző ad egy azonosítót a munkamenetnek: session ID, amely egyedi kulcs a munkamenetre nézve (nagyon kevés az ismétlődés lehetősége). Az azonosító a szerver beállításai szerint tárolódhat URLben és/vagy sütiben. Lehetőség van a kettős tárolásra is, bár nem ajánlott.
A leírásban a PHP munkamenet kezeléséről lesz szó. A munkamenet indításához, létrehozásához a session_start() parancsot kell meghívni (ha az már nincsen automatikusan elindítva, a szerver beállításától függ). Abban az esetben, amikor a munkamenet azonosítója sütikben is tárolt, a munkamenetett még a headerben létre kell hozni (bármiféle szöveg kiírása előtt, más szavakkal a html tag előtt). A munkamenetnek adhatunk egy egyszerűbb nevet is, bár az azonosítóját is lecserélhetjük. Mindkét műveletet a munkamenet indítása előtt kell elvégezni.
A session_name() a session_id-t tároló süti/url paraméter nevét adja meg. A függvényt ha azt paraméterezzük beállítja a megadott nevet, ellenkező esetben visszatéríti a használatban lévő nevet, pl.:
session_name("munkamenet"); //beállítja a munkamenet nevét $munkamenet_neve = session_name(); // visszaadja a jelenlegi munkamenet nevét
A session_id() is hasonlóan működik, még a munkamenet indítása előtt kell meghívni a függvényt. Ha paraméterezzük beállítja a munkamenet azonosítóját, paraméter nélkűl a munkamenet jelenlegi azonosítóját kapjuk válaszúl. Továbbá ide tartozik az új azonosítót generáló függvény is: session_regenerate_id(). A függvény segítségünkre lehet olyan esetekben, amikor szükségünk van egy újabb munkamenet azonosítora.
session_regenerate_id(); //új azonosítót kér a munkamenetnek session_id("sdg86sg6s896g896s89ys89hysd9h8"); //beállítunk egy azonosítót $munkamenet_id = session_id(); // visszaadja a jelenlegi munkamenet azonosítóját
A munkamenet tartalmát anélkül is megsemmisíthetjük, hogy töröljük azt, majd újra indítsuk. A tartalom törlésére szolgáló függvény a session_unset(). Amennyiben törölni szeretnénk a munkamenetünk állományát a szerverről a session_destroy() függvény a meghívandó eljárás.
A munkamenet előnyei közés sorolhatjuk a biztonságos adattárolást és a könnyü kezelhetőséget is. A munkamenettel tömb-műveleteket végezhetünk, nem vagyunk kötelezve arra, hogy fügvényekkel tároljunk adatokat, illetve, hogy függvények meghívásával nyerjük ki azokat. A következőpélda bemutat néhány műveletet:
$_SESSION['kulcs'] = "adat"; // beletesz 'kulcs' azonosítóval egy karakterláncot ("adat") $_SESSION['kulcs2'] = 2; // beletesz 'kulcs2' azonosítóval egy számot (2) $valtozo = $_SESSION['kulcs']; // átadja az értékét $_SESSION['kulcs2']++; // megnöveli a tárolt értéket (2++ = 2 + 1 = 3) echo $_SESSION['kulcs2']; // kiírja az értéket: 3
A munkamenetek kezelése sokkal komplexebb utakon is elérhető és vannak kiegészítő függvényei is, amelyekről a leírásban nem esett szó. Az így kimaradt függvények nagyon ritkán használtak, de további információt találhatsz a php hivatalos leírásában.





