Zend_Session-BasicUsage.xml 7.7 KB

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