25.2. Grundlegende Verwendung
Zurück | Kapitel 25. Zend_Session | Weiter

## 25.2. Grundlegende Verwendung

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.

### 25.2.1. Übungs-Beispiele

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.

Beispiel 25.3. Alter Weg: PHP-Session-Zugriff

    <?php
        $_SESSION['Zend_Auth']['user'] = "myusername";
        $_SESSION['Irgendein_Web_Service']['user'] = "mywebusername";
    ?>

### 25.2.2. Schleife über Session-Namespaces

`Zend_Session_Namespace` stellt das volle IteratorAggregate-Interface zur Verfügung, einschließlich der Unterstützung des `foreach` Statements:

Beispiel 25.4. Session-Iteration

    <?php
        // Zend_Session kann in Schritten durchlaufen werden
        require_once 'Zend/Session.php';
        $aNamespace = new Zend_Session('some_namespace_with_data_present');
        foreach ($aNamespace as $index => $value) {
            echo "aNamespace->$index = '$value';\n";
        }
    ?>

### 25.2.3. Zurgriffsfunktionen für Session-Namespaces

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:

Beispiel 25.5. Zugriff auf Session-Daten

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

Zurück | Nach oben | Weiter
Kapitel 25. Zend_Session | Zum Anfang | 25.3. Advanced Usage