1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
|
<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="zend.session.basic_usage">
<title>Grundsätzliche Verwendung</title>
<para>
<classname>Zend_Session_Namespace</classname> Instanzen stellen die primäre
<acronym>API</acronym> 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.
<classname>Zend_Session</classname> verwendet die Erweiterung ext/session und dessen
spezielle superglobale Variable <varname>$_SESSION</varname> als Speichermechanismus für
Session Daten. Wärend <varname>$_SESSION</varname> im globalen Namensraum von
<acronym>PHP</acronym> noch immer vorhanden ist, sollten Entwickler davon absehen diese
direkt zu verwenden, damit <classname>Zend_Session</classname> und
<classname>Zend_Session_Namespace</classname> am effizientesten und sichersten Ihre Sammlung
von Session relevanten Funktionen bereitstellen können.
</para>
<para>
Jede Instanz von <classname>Zend_Session_Namespace</classname> korrespondiert mit einem
Eintrag des Superglobalen Arrays <varname>$_SESSION</varname>, wobei die Namensräume als
Schlüssel verwendet werden.
</para>
<programlisting language="php"><![CDATA[
$myNamespace = new Zend_Session_Namespace('myNamespace');
// $myNamespace corresponds to $_SESSION['myNamespace']
]]></programlisting>
<para>
Es ist möglich <classname>Zend_Session</classname> in Verbindung mit anderem Code zu
verwenden welche <varname>$_SESSION</varname> direkt verwendet. Um Probleme zu vermeiden
wird trotzdem stärkstens empfohlen das solcher Code nur Teile von
<varname>$_SESSION</varname> verwendet die nicht mit Instanzen von
<classname>Zend_Session_Namespace</classname> korrespondieren.
</para>
<sect2 id="zend.session.basic_usage.basic_examples">
<title>Übungs Beispiele</title>
<para>
Wenn kein Namensraum bei der Instanziierung von
<classname>Zend_Session_Namespace</classname> definiert wurde, werden alle Daten
transparent in einem Namensraum gespeichert der "<code>Default</code>" heißt.
<classname>Zend_Session</classname> ist nicht dazu gedacht um direkt mit den Inhalten
von Containern der Session Namensräume zu arbeiten. Stattdessen wird
<classname>Zend_Session_Namespace</classname> verwendet. Das folgende Beispiel
demonstriert die Verwendung dieses Standard Namensraums und zeigt wie die Anzahl der
Zugriffe eines Benutzers gezählt werden kann.
</para>
<example id="zend.session.basic_usage.basic_examples.example.counting_page_views">
<title>Seitenzugriffe zählen</title>
<programlisting language="php"><![CDATA[
$defaultNamespace = new Zend_Session_Namespace('Default');
if (isset($defaultNamespace->numberOfPageRequests)) {
// Das erhöht den Zählen für jeden Seitenaufruf
$defaultNamespace->numberOfPageRequests++;
} else {
$defaultNamespace->numberOfPageRequests = 1; // Erster Zugriff
}
echo "Seitenzugriffe in dieser Session: ",
$defaultNamespace->numberOfPageRequests;
]]></programlisting>
</example>
<para>
Wenn mehrere Module Instanzen von <classname>Zend_Session_Namespace</classname>
verwenden die verschiedene Namensräume haben, erhält jedes Modul Datenkapselung für die
eigenen Daten der Session. Dem <classname>Zend_Session_Namespace</classname> Konstruktor
kann ein optionales <varname>$namespace</varname> Argument übergeben werden, welches
Entwicklern erlaubt Session Daten in eigene Namensräume zu partitionieren. Die
Verwendung von Namensräumen ist ein effektiver und populärer Weg um Session Daten
gegenüber Änderungen durch ungewollte Namenskollisionen sicher zu machen.
</para>
<para>
Namen für Namensräume sind limitiert auf Sequenzen von Zeichen die als nicht leere
<acronym>PHP</acronym> Strings dargestellt werden und nicht mit einem Unterstrich
("<code>_</code>") Zeichen beginnen. Nur Kern Komponenten die im Zend Framework
inkludiert sind sollten Namen für Namensräume der wenden die mit "<code>Zend</code>"
beginnen.
</para>
<example id="zend.session.basic_usage.basic_examples.example.namespaces.new">
<title>Neuer Weg: Namensräume verhindern Kollisionen</title>
<programlisting language="php"><![CDATA[
// 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";
]]></programlisting>
</example>
<para>
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.
</para>
<example id="zend.session.basic_usage.basic_examples.example.namespaces.old">
<title>Alter Weg: PHP Session Zugriff</title>
<programlisting language="php"><![CDATA[
$_SESSION['Zend_Auth']['user'] = "meinbenutzername";
$_SESSION['Some_Web_Service']['user'] = "meinwebbenutzername";
]]></programlisting>
</example>
</sect2>
<sect2 id="zend.session.basic_usage.iteration">
<title>Session Namensräume wiederholen</title>
<para>
<classname>Zend_Session_Namespace</classname> stellt das komplette <ulink
url="http://www.php.net/~helly/php/ext/spl/interfaceIteratorAggregate.html">IteratorAggregate
Interface</ulink> zur Verfügung, was die Unterstützung der <code>foreach</code>
Anweisung beinhält:
</para>
<example id="zend.session.basic_usage.iteration.example">
<title>Session wiederholen</title>
<programlisting language="php"><![CDATA[
$aNamespace =
new Zend_Session_Namespace('Einige_Namensräume_Mit_aktuellen_Daten');
foreach ($aNamespace as $index => $value) {
echo "aNamespace->$index = '$value';\n";
}
]]></programlisting>
</example>
</sect2>
<sect2 id="zend.session.basic_usage.accessors">
<title>Zugriffsfunktionen für Session Namensräume</title>
<para>
<classname>Zend_Session_Namespace</classname> implementiert die <ulink
url="http://www.php.net/manual/de/language.oop5.overloading.php">magischen
Methoden</ulink> <methodname>__get()</methodname>, <methodname>__set()</methodname>,
<methodname>__isset()</methodname>, und <methodname>__unset()</methodname> welche nicht
direkt angesprochen werden sollte, ausser von innerhalb einer Subklasse. Stattdessen
verwenden die normalen Opteratoren automatisch diese Methoden, wie im folgenden
Beispiel:
</para>
<example id="zend.session.basic_usage.accessors.example">
<title>Zugriff auf Session Daten</title>
<programlisting language="php"><![CDATA[
$namespace = new Zend_Session_Namespace(); // Standard Namensraum
$namespace->foo = 100;
echo "\$namespace->foo = $namespace->foo\n";
if (!isset($namespace->bar)) {
echo "\$namespace->bar nicht gesetzt\n";
}
unset($namespace->foo);
]]></programlisting>
</example>
</sect2>
</sect1>
|