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.
Marzec 23rd, 2010 at 13:38
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”;
}