Zend_Session_Namespace
Instanzen stellen die primäre API für das Manipulieren von Session Daten
im Zend Framework bereit. Namensräume werden verwendet um alle Session Daten zu kapseln, aber es existiert
auch ein Standard Namensraum für jene die nur einen Namensraum für alle Session Daten benötigen.
Zend_Session
verwendet die Erweiterung ext/session und dessen spezielle superglobale Variable
$_SESSION
als Speichermechanismus für Session Daten. Wärend $_SESSION
im
globalen Namensraum von PHP noch immer vorhanden ist, sollten Entwickler davon absehen diese direkt zu
verwenden, damit Zend_Session
und Zend_Session_Namespace
am effizientesten
und sichersten Ihre Sammlung von Session relevanten Funktionen bereitstellen können.
Wenn kein Namensraum bei der Instanziierung von Zend_Session definiert wurde, werden alle Daten
transparent in einem Namensraum gespeichert der "Default
" heißt. Zend_Session
ist nicht dazu gedacht um direkt mit den Inhalten von Containern der Session Namensräume zu arbeiten.
Stattdessen wird Zend_Session_Namespace
verwendet. Das folgende Beispiel demonstriert die
Verwendung dieses Standard Namensraums und zeigt wie die Anzahl der Zugriffe eines Benutzers auf eine
Seite einer Homepage gezählt werden kann. Um dieses Beispiel zu testen, muß der folgende Code in der
ZF Bootstrap Datei hinzugefügt werden:
Beispiel 30.1. Seitenzugriffe zählen
<?php require_once 'Zend/Session.php'; $defaultNamespace = new Zend_Session_Namespace('Default'); // verwenden der magischen __isset() Methode in Zend_Session_Namespace: if (isset($defaultNamespace->numberOfPageRequests)) { $defaultNamespace->numberOfPageRequests++; // Das erhöht den Zählen für jeden Seitenaufruf } else { $defaultNamespace->numberOfPageRequests = 1; // Erster Zugriff } echo "Seitenzugriffe in dieser Session: ", $defaultNamespace->numberOfPageRequests; ?>
Eine der vielen Vorteile von Zend_Session_Namespace ergibt sich wenn mehrere Module Zend_Session_Namespace verwenden um Ihre Session Daten zu kapseln. Zend_Session kann ein optionales $namespace Argument im Konstruktor übergeben werden, welches es anderen Komponenten, Modulen und entwickler-spezifischem Code erlaubt sicherzustellen das Ihre Daten durch eine Partition geschützt sind, die zwischen den Datenbereichen die von anderen Komponenten, Modulen und Entwickler-Code bestehen. Die Verwendung von Namensräumen bietet einen effektiven und populären Web um einen Teilbereich von Session Daten vor irrtümlichen Änderungen zu "schützen". Die Namen von Namensräumen sind limitiert auf Zeichenketten welche durch nicht-leere PHP Strings dargestellt werden und welche nicht mit einem Unterstrich-Zeichen ('_') beginnen. Nur Kern-Komponenten welche im Zend Framework beinhaltet sind, sollten Namensräume verwenden die mit 'Zend_' beginnen.
Beispiel 30.2. Neuer Weg: Namensräume verhindern Kollisionen
<?php // In der Zend_Auth Komponente require_once 'Zend/Session.php'; $authNamespace = new Zend_Session_Namespace('Zend_Auth'); $authNamespace->user = "meinbenutzername"; // In einer Web Service Komponente $webServiceNamespace = new Zend_Session_Namespace('Mein_Web_Service'); $webServiceNamespace->user = "meinwebbenutzername"; ?>
Das obige Beispiel erzielt den gleichen Effekt wie der folgende Code, ausser das die obigen Session Objekte die Kapselung der Session Daten innerhalb des jeweiligen Namensraumes aufrecht erhält.
Zend_Session_Namespace
stellt das komplette
IteratorAggregate Interface
zur Verfügung, was die Unterstützung der foreach
Anweisung beinhält:
Die gewöhnlichen Zugriffsmethoden sind über die magischen __set(), __unset(), __isset() und __get() Methoden verfügbar. Die magischen Methoden sollten nicht direkt verwendet werden, ausser innerhalb einer Subklasse von Zend_Session. Stattdessen können normale Operationen verwendet werden, um diese magischen Methoden aufzurufen: