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: