Zend_Session_Namespace
Instanzen stellen die primäre API für das Ändern von
Session Daten im Zend Framework bereit. Namensräume werden verwendet, um Session Daten zu
kapseln, auch wenn ein Standard Namensraum für diejenigen existiert, die nur einen
Namensraum für ihre Session Daten verwenden möchten. Zend_Session verwendet ext/session und
seine besondere superglobale Variable $_SESSION
als Speicher-Mechanismus für
Session-Zustands-Daten. Auch wenn die Variable $_SESSION
immernoch global
zugänglich ist, sollten Entwickler davon absehen direkt auf sie zuzugreifen, damit
Zend_Session effektiv und sicher seine Sammlung session-spezifischer Funktionalität zur
Verfügung stellen kann.
Wenn beim Erzeugen der Zend_Session-Instanz kein Namensraum angegeben wird, werden alle
Daten im 'Default'
-Namespace gespeichert. Zend_Session
hat
nicht die Aufgabe, direkt auf die Inhalte der Container für die Session Namensräume
zuzugreifen. Stattdessen verwenden wir Zend_Session_Namespace
. Das
Beispiel unten demonstriert die Nutzung dieses Standard-Namespace und zeigt, wie man
die Anzahl der Seitenaufrufe auf einer Website durch einen Nutzer zählen kann. Um dies
zu testen, erweitern Sie Ihren ZF-Bootstrap-Bereich um folgenden Code:
Beispiel 29.1. Seitenaufrufe zählen
<?php require_once 'Zend/Session.php'; $defaultNamespace = new Zend_Session_Namespace('Default'); // verwende die magische Methode __isset() in Zend_Session_Namespace: if (isset($defaultNamespace->numberOfPageRequests)) { $defaultNamespace->numberOfPageRequests++; // wird bei jedem Aufruf erhöht. } else { $defaultNamespace->numberOfPageRequests = 1; // erstes Mal } echo "Seitenaufrufe in dieser Session: ", $defaultNamespace->numberOfPageRequests; ?>
Einer der vielen Vorteile von Zend_Session_Namespace ergibt sich, wenn mehrere Module Zend_Session_Namespace
nutzen und ihre Session Daten kapseln. Zend_Session kann über den Konstruktor
ein optionales $namespace
-Argument übergeben werden, welches dazu führt, dass die Daten anderer
Komponenten, Module oder entwicklerspezifischer Code-Teile durch eine Trennung zwischen den Daten-Bereichen
vor versehentlichem Überschreiben geschützt sind. Die Verwendung von Namespaces ist ein populäres Mittel,
um eine Teilmenge der Session-Zustands-Daten vor unbeabsichtigtem Überschreiben zu "schützen". Als Namen
für Namespaces sind nur nicht-lehre PHP-Strings erlaubt, die nicht mit einem Unterstrich ('_') beginnen.
Nur mitgelieferte Kern-Komponenten des Zend-Frameworks sollten Namespaces benutzen, die mit 'Zend_' beginnen.
Beispiel 29.2. Neuer Weg: Kollisionen durch Namespaces vermeiden
<?php // in der Zend_Auth Komponente require_once 'Zend/Session.php'; $authNamespace = new Zend_Session_Namespace('Zend_Auth'); $authNamespace->user = "myusername"; // in einer Web-Services-Komponente $webServiceNamespace = new Zend_Session_Namespace('Some_Web_Service'); $webServiceNamespace->user = "mywebusername"; ?>
Das obige Beispiel erzielt den selbst Effekt wie der Code unten, mit dem Unterschied, dass das Session-Objekt oben die Kapselung der Session-Daten in ihrem jeweiligen Namensbereich aufrecht erhält.
Zend_Session_Namespace
stellt das volle
IteratorAggregate-Interface
zur Verfügung, einschließlich der Unterstützung des foreach
Statements:
Die üblichen Zugriffsmethoden sind verfügbar, zur Verfügung gestellt durch die magischen Methoden __set(), __unset(), __isset() und __get(). Diese Methoden sollten nicht direkt benutzt werden, außer aus Unterklassen von Zend_Session. Statt dessen verwendet man normale Operatoren, um diese magischen Methoden aufzurufen, zum Beispiel: