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 Namespace angegeben wird, werden alle Daten im
'Default'-Namespace gespeichert. 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 25.1. Seitenaufrufe zählen
<?php
require_once 'Zend/Session.php';
$defaultNamespace = new Zend_Session_Namespace('Default');
$defaultNamespace->numberOfPageRequests++; // wird bei jedem Aufruf erhöht.
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 25.2. Neuer Weg: Kollisionen durch Namespaces vermeiden
<?php
// in der Zend_Auth Komponente
require_once 'Zend/Session.php';
$authNamespace = new Zend_Session('Zend_Auth');
$authNamespace->user = "myusername";
// in einer Web-Services-Komponente
$webServiceNamespace = new Zend_Session('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: