30.2. Grundsätzliche Verwendung

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.

30.2.1. Übungs Beispiele

Wenn kein Namensraum bei der Instanziierung von Zend_Session 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 auf eine Seite einer Homepage gezählt werden kann. Um dieses Beispiel zu testen, muß der folgende Code in der ZF Bootstrap Datei hinzugefügt werden:

Beispiel 30.1. Seitenzugriffe zählen

<?php
    require_once 'Zend/Session.php';

    $defaultNamespace = new Zend_Session_Namespace('Default');

    // verwenden der magischen __isset() Methode in Zend_Session_Namespace:
    if (isset($defaultNamespace->numberOfPageRequests)) {
        $defaultNamespace->numberOfPageRequests++; // Das erhöht den Zählen für jeden Seitenaufruf
    } else {
        $defaultNamespace->numberOfPageRequests = 1; // Erster Zugriff
    }

    echo "Seitenzugriffe in dieser Session: ", $defaultNamespace->numberOfPageRequests;
?>

Eine der vielen Vorteile von Zend_Session_Namespace ergibt sich wenn mehrere Module Zend_Session_Namespace verwenden um Ihre Session Daten zu kapseln. Zend_Session kann ein optionales $namespace Argument im Konstruktor übergeben werden, welches es anderen Komponenten, Modulen und entwickler-spezifischem Code erlaubt sicherzustellen das Ihre Daten durch eine Partition geschützt sind, die zwischen den Datenbereichen die von anderen Komponenten, Modulen und Entwickler-Code bestehen. Die Verwendung von Namensräumen bietet einen effektiven und populären Web um einen Teilbereich von Session Daten vor irrtümlichen Änderungen zu "schützen". Die Namen von Namensräumen sind limitiert auf Zeichenketten welche durch nicht-leere PHP Strings dargestellt werden und welche nicht mit einem Unterstrich-Zeichen ('_') beginnen. Nur Kern-Komponenten welche im Zend Framework beinhaltet sind, sollten Namensräume verwenden die mit 'Zend_' beginnen.

Beispiel 30.2. Neuer Weg: Namensräume verhindern Kollisionen

<?php
    // 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 30.3. Alter Weg: PHP Session Zugriff

<?php
    $_SESSION['Zend_Auth']['user'] = "meinbenutzername";
    $_SESSION['Some_Web_Service']['user'] = "meinwebbenutzername";
?>

30.2.2. Session Namensräume wiederholen

Zend_Session_Namespace stellt das komplette IteratorAggregate Interface zur Verfügung, was die Unterstützung der foreach Anweisung beinhält:

Beispiel 30.4. Session wiederholen

<?php
    // Zend_Session ist wiederholbar
    require_once 'Zend/Session.php';
    $aNamespace = new Zend_Session_Namespace('Einige_Namensräume_Mit_aktuellen_Daten');
    foreach ($aNamespace as $index => $value) {
        echo "aNamespace->$index = '$value';\n";
    }
?>

30.2.3. Zugriffsfunktionen für Session Namensräume

Die gewöhnlichen Zugriffsmethoden sind über die magischen __set(), __unset(), __isset() und __get() Methoden verfügbar. Die magischen Methoden sollten nicht direkt verwendet werden, ausser innerhalb einer Subklasse von Zend_Session. Stattdessen können normale Operationen verwendet werden, um diese magischen Methoden aufzurufen:

Beispiel 30.5. Zugriff auf Session Daten

<?php
            $object->property = $value; echo
            (isset($object->property) ? 'set' : 'unset');
?>