lut 07

Pytanie po co obsługiwać sesję ze pomocą Zenda, w sumie po nic, ale Zend udostępnia kilka ciekawych bajerów które można zrobić z sesją.
Sesję można inicjować w kilku miejscach, najlepiej tam gdzie ma ona być widoczna można zrobić to w pliku bootstrap.php, w jakiejś metodzie, niech to będzie metoda o nazwie _initSession(), bądź metodzie init() kontrolera lub konstruktorze klasy zewnętrznej.

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initSession() {
        $this->_session = new Zend_Session_Namespace('nauka');
    }
}

Tyle by właściwie wystarczyło pole $_session bo takie sobie wymyśliłem nie będzie dostępne w metodach kontrolera, w kontrolerze trzeba ponownie utworzyć obiekt sesji aby mieć dostęp do wartości sesji. Aby teraz przypisać jakąś wartość do sesji wystarczy napisać

$this->_session->mojLogin = "Tomasz"

Wyjaśnienia może jeszcze wymagać parametr klasy o nazwie Zend_Session_Namespace, klasa ta przyjmuje parametr który jest przestrzenią nazw na której Zend będzie operować. Możemy dzięki temu mieć wiele tych samych parametrów sesji ale w różnych przestrzeniach nazw. A co z tymi bajerami odnośnie sesji? Więc tak przykładowo:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initSession() {
    $this->_session = new Zend_Session_Namespace('nauka');
    $this->_session->setExpirationSeconds(5);
    $this->_session->lock();
    $this->_session->unlock();
    }
}

setExpirationSeconds – Ustalamy ile czasu elementy sesji mają być przechowywane. Czas podany jest w sekundach, potem Zend je automatycznie czyści, jeśli chcemy tylko dla konkretnego klucza to zdefiniować to wystarczy napisać np. setExpirationSeconds(‘mojLogin’,5);

lock, unlock – blokuje oraz odblokowuje dostęp do sesji. Po zablokowaniu dostępu próba zmiany elementów sesji spowoduje powstanie błędu.

Autor siema \\ tagi: , , , ,



1 komentarz do “Sesja w Zend Framework”

  1. jajcarzd1 napisał(a):

    No ale można myślę do kontrolera przekazać instację sessji utworzonej w bootstrapie w ten sposób.

    public function indexAction()
    {
    $bootstrap = $this->getInvokeArg(‘bootstrap’);
    $session = $bootstrap->getResource(’session’);
    $session->login = “marek”;

    }