13 Zend Framework Session használata

Default book

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