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.
Jede Instanz von Zend_Session_Namespace
korrespondiert mit einem
Eintrag des Superglobalen Arrays $_SESSION
, wobei die Namensräume als
Schlüssel verwendet werden.
$myNamespace = new Zend_Session_Namespace('myNamespace'); // $myNamespace corresponds to $_SESSION['myNamespace']
Es ist möglich Zend_Session
in Verbindung mit anderem Code zu
verwenden welche $_SESSION
direkt verwendet. Um Probleme zu vermeiden
wird trotzdem stärkstens empfohlen das solcher Code nur Teile von
$_SESSION
verwendet die nicht mit Instanzen von
Zend_Session_Namespace
korrespondieren.
Wenn kein Namensraum bei der Instanziierung von
Zend_Session_Namespace
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 gezählt werden kann.
Beispiel 875. Seitenzugriffe zählen
$defaultNamespace = new Zend_Session_Namespace('Default'); if (isset($defaultNamespace->numberOfPageRequests)) { // Das erhöht den Zählen für jeden Seitenaufruf $defaultNamespace->numberOfPageRequests++; } else { $defaultNamespace->numberOfPageRequests = 1; // Erster Zugriff } echo "Seitenzugriffe in dieser Session: ", $defaultNamespace->numberOfPageRequests;
Wenn mehrere Module Instanzen von Zend_Session_Namespace
verwenden die verschiedene Namensräume haben, erhält jedes Modul Datenkapselung für die
eigenen Daten der Session. Dem Zend_Session_Namespace
Konstruktor
kann ein optionales $namespace
Argument übergeben werden, welches
Entwicklern erlaubt Session Daten in eigene Namensräume zu partitionieren. Die
Verwendung von Namensräumen ist ein effektiver und populärer Weg um Session Daten
gegenüber Änderungen durch ungewollte Namenskollisionen sicher zu machen.
Namen für Namensräume sind limitiert auf Sequenzen von Zeichen die als nicht leere
PHP Strings dargestellt werden und nicht mit einem Unterstrich
("_
") Zeichen beginnen. Nur Kern Komponenten die im Zend Framework
inkludiert sind sollten Namen für Namensräume der wenden die mit "Zend
"
beginnen.
Beispiel 876. Neuer Weg: Namensräume verhindern Kollisionen
// 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.
Beispiel 877. Alter Weg: PHP Session Zugriff
$_SESSION['Zend_Auth']['user'] = "meinbenutzername"; $_SESSION['Some_Web_Service']['user'] = "meinwebbenutzername";
Zend_Session_Namespace
stellt das komplette IteratorAggregate
Interface zur Verfügung, was die Unterstützung der foreach
Anweisung beinhält:
Beispiel 878. Session wiederholen
$aNamespace = new Zend_Session_Namespace('Einige_Namensräume_Mit_aktuellen_Daten'); foreach ($aNamespace as $index => $value) { echo "aNamespace->$index = '$value';\n"; }
Zend_Session_Namespace
implementiert die magischen
Methoden __get()
, __set()
,
__isset()
, und __unset()
welche nicht
direkt angesprochen werden sollte, ausser von innerhalb einer Subklasse. Stattdessen
verwenden die normalen Opteratoren automatisch diese Methoden, wie im folgenden
Beispiel:
Beispiel 879. Zugriff auf Session Daten
$namespace = new Zend_Session_Namespace(); // Standard Namensraum $namespace->foo = 100; echo "\$namespace->foo = $namespace->foo\n"; if (!isset($namespace->bar)) { echo "\$namespace->bar nicht gesetzt\n"; } unset($namespace->foo);