A Zend Session kezelése a PHP session kezelésén alapul és a cookie-k és az URL-ekben küldött azonosítókat használja, ugyanúgy, mint a PHP. Ugyanazokat a standard eszközöket használja a session azonosításra is.
Session névterek
Beszéljünk a névterekről. Amikor a $_SESSION['valami'] kifejezést használjuk, akkor a "valami" egy névtér és ebben a névtérben található a belépések száma érték, ha ezt így tároljuk: $_SESSION['valami']['belepesek_szama']. Hogyan van ez a Zend esetében?
Használjuk a application/controllers/UserController.php fájlban az alábbi sorokat:
<?php require_once 'Zend/Session/Namespace.php'; .... public function loginFormAction() { $request = $this->getRequest(); $ns = new Zend_Session_Namespace('valami'); if(!isset($ns->yourLoginRequest)){ $ns->belepesek_szama = 1; }else{ $ns->belepesek_szama++; } $this->view->assign('request', $ns->belepesek_szama); $this->view->assign('action', $request->getBaseURL()."/user/auth"); $this->view->assign('title', 'Login Form'); $this->view->assign('username', 'User Name'); $this->view->assign('password', 'Password'); }
application/views/scripts/user/loginform.phtml
<? include "header.phtml"; ?> <h1><?=$this->escape($this->title);?></h1> You have entered this page: <?=$this->escape($this->request);?> time(s). <form method='post' action='<?=$this->escape($this->action);?>'> <table> <tr> <td><?=$this->escape($this->username);?></td> <td><input type='text' name='username'></td> </tr> <tr> <td><?=$this->escape($this->password);?></td> <td><input type='password' name='password'></td> </tr> </table> <input type='submit' name='login' value='Login'> </form> <? include "footer.phtml"; ?>
Ez a kód számolni fogja a belépési próbálkozásokat
Módosítsuk a loginFormAction() metódust is így: public function loginFormAction() { $request = $this->getRequest(); $ns = new Zend_Session_Namespace('HelloWorld'); if(!isset($ns->yourLoginRequest)){ $ns->yourLoginRequest = 1; }else{ $ns->yourLoginRequest++; } $this->view->assign('request', $ns->yourLoginRequest); $this->view->assign('action', $request->getBaseURL()."/user/auth"); $this->view->assign('title', 'Login Form'); $this->view->assign('username', 'User Name'); $this->view->assign('password', 'Password'); }
A hozzá tartozó application/views/scripts/user/userpage.phtml frissítése legyen ilyen:
<? include "header.phtml"; ?> <h1>Hello, <?=$this->escape($this->real_name);?></h1> You have entered this page: <?=$this->escape($this->request);?> time(s). <a href='<?=$this->escape($this->urllogout);?>'>Logout</a> <? include "footer.phtml"; ?>
A fenti példában a sessionok kezelése automatikusan megy és minden belépésnél megkapjuk a szükséges session adatokat.
A sessionok adatait az alábbi módon kapom meg, bármikor és bárhol:
$ns = new Zend_Session_Namespace('valami');
Az adatok beállítása így megy:
$ns->yourLoginRequest = 1; $ns->thisIsSession = "Oke"; $ns->nameOfSession = "MySession"; $ns->foo = 10;
Az adatok kiíratása, elérése így megy:
echo $ns->yourLoginRequest; echo $ns->thisIsSession; echo $ns->nameOfSession; echo $ns->foo;
A namespace-eket lehet lockolni is. Ekkor a namespace csak olvashatóvá válik!
$ns = new Zend_Session_Namespace('valami'); $ns->lock();
és lehet unlock-olni is
$ns->unlock();
A Namespace lejáratát lehet siettetni:
$n->setExpirationSeconds(60);
Be lehet állítani csak egy részét a namespace lejáratának:
$ns->setExpirationSeconds(60,'yourLoginRequest');
Összességében a session meglehetősen jól használható dolog, hasonlít az eredeti session kezelésre