Zend_Session-BasicUsage.xml 7.5 KB

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