Zend_Session-BasicUsage.xml 7.5 KB

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