Instancje Zend_Session_Namespace
zapewniają główne API do
manipulowania danymi sesji w Zend Framework. Przestrzenie nazw są
używane do segregowania wszystkich danych sesji, chociaż dla tych,
którzy potrzebują tylko jednej przestrzeni nazw dla wszystkich danych
sesji, istnieje domyślna przestrzeń nazw. Zend_Session
używa rozszerzenia session i jego specjalnej superglobalnej tablicy
$_SESSION
jako mechanizmu składowania danych stanu sesji.
Dopóki tablica $_SESSION
jest wciąż dostępna w globalnej
przestrzeni nazw PHP, programiści powinni wystrzegać się uzyskiwania
bezpośredniego dostępu do niej, więc dlatego Zend_Session
oraz Zend_Session_Namespace
mogą najbardziej efektywnie
i bezpiecznie zapewniać zbiór funkcjonalności związanych z sesją.
Jeśli przestrzeń nazw nie zostanie określona przy tworzeniu
instancji Zend_Session, wszystkie dane będą przechowywane w
przestrzeni nazw "Default
". Klasa
Zend_Session
nie jest przeznaczona do bezpośredniej
pracy z zawartością przestrzeni nazw sesji. Zamiast niej używamy
klasy Zend_Session_Namespace
. Poniższy przykład
demonstruje użycie domyślnej przestrzeni nazw, pokazując jak
obliczyć ile razy użytkownik oglądał strony w twoim serwisie.
Aby przetestować ten przykład, dodaj poniższy kod do twojego pliku
ładującego ZF:
Przykład 30.1. Zliczanie odsłon stron
<?php require_once 'Zend/Session.php'; $defaultNamespace = new Zend_Session_Namespace('Default'); // używamy magicznej metody __isset() w Zend_Session_Namespace: if (isset($defaultNamespace->numberOfPageRequests)) { $defaultNamespace->numberOfPageRequests++; // to będzie inkrementowane po każdym przeładowaniu strony } else { $defaultNamespace->numberOfPageRequests = 1; // pierwsze przeładowanie } echo "Page requests this session: ", $defaultNamespace->numberOfPageRequests; ?>
Jedną z wielu zalet klasy Zend_Session_Namespace widać wtedy, gdy wiele modułów używa Zend_Session_Namespace i uzyskuje dostęp do hermetyzacji danych sesji. Do konstruktora Zend_Session można przekazać opcjonalny argument $namespace, który pozwala innym komponentom, modułom oraz specyficznemu kodowi programisty na uzyskanie gwarancji tego, że ich dane będą zabezpieczone przegrodą od obszarów danych używanych przez inne komponenty, moduły oraz inny kod programisty. Przestrzenie nazw zapewniają efektywny i popularny sposób do zabezpieczenia podzbiorów danych stanu sesji przed przypadkowymi zmianami. Nazwy przestrzeni nazw mogą składać się tylko z niepustych łańcuchów znaków PHP, ktęre nie zaczynają się od znaku podkreślnika ('_'). Jedynie rdzenne komponenty zawarte w Zend Framework powinny używać przestrzeni nazw o nazwach zaczynających się od 'Zend_'.
Przykład 30.2. Nowy sposób: Przestrzenie nazw zapobiegają kolizjom
<?php // w komponencie Zend_Auth require_once 'Zend/Session.php'; $authNamespace = new Zend_Session_Namespace('Zend_Auth'); $authNamespace->user = "myusername"; // w komponencie serwisów web $webServiceNamespace = new Zend_Session_Namespace('Some_Web_Service'); $webServiceNamespace->user = "mywebusername"; ?>
Powyższy przykład daje ten sam efekt jak kod poniżej, z wyjątkiem tego, że obiekt sesji utrzymuje hermetyzację danych sesji wewnątrz odpowiadającej mu przestrzeni nazw.
Zend_Session_Namespace
zapewnia pełny
interfejs IteratorAggregate
, właczając w to obsługę wyrażenia foreach
:
Standardowe metody dostępowe są dostępne za pomocą magicznych metod __set(), __unset(), __isset(), oraz __get(). Magiczne metody nie powinny być używane bezpośrednio, z wyjątkiem wnętrza klasy rozszerzającej Zend_Session. Zamiast tego, używaj normalnych operatorów aby wywoływać te magiczne metody, na przykład: