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 des
'Default'
-Namespace und zeigt, wie man die Anzahl der Seitenaufrufe auf einer Website durch
einen Nutzer zählen kann. Erweitern Sie Ihren ZF-Bootstrap-Bereich um folgenden Code (mit Ausnahme des
echo
):
Beispiel 21.1. Seitenaufrufe zählen
<?php require_once 'Zend/Session.php'; $session = new Zend_Session(); $session->numberOfPageRequests++; // wird bei jedem Aufruf erhöht. echo "Seitenaufrufe in dieser Session: ", $session->numberOfPageRequests; ?>
Einer der vielen Vorteile von Zend_Session ist, dass mehrere Module Zend_Session nutzen können und ihre
Daten dadurch zu einem gewissen Grad voneinander abgekapselt werden. 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 21.2. Neuer Weg: Kollisionen durch Namespaces vermeiden
<?php // in der Zend-Auth Komponente require_once 'Zend/Session.php'; $auth_session = new Zend_Session('Zend_Auth'); $auth_session->user = "myusername"; // in einer Web-Services-Komponente $web_service_session = new Zend_Session('Irgendein_Web_Service'); $web_service_session->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. Diverse Überprüfungen und die Verwendung eines Singleton-Patterns in Zend_Session_Core sind dafür verantwortlich, dass diese Kapselung erzwungen wird.
Zend_Session 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: