multiuser-sessions.xml 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="learning.multiuser.sessions">
  5. <title>User Session im Zend Framework managen</title>
  6. <sect2 id="learning.multiuser.sessions.intro">
  7. <title>Einführung in Sessions</title>
  8. <para>
  9. Der Erfolg des Webs ist tief verwurzelt im Protokoll welches das Web antreibt:
  10. <acronym>HTTP</acronym>. <acronym>HTTP</acronym> über TCP ist von seiner Natur her
  11. Statuslos, was bedeutet dass auch das Web selbst Statuslos ist. Wärend dieser Aspekt
  12. einer der dominierenden Faktoren dafür ist warum das Web ein so populäres Medium
  13. geworden ist, verursacht es auch einige interessante Probleme für Entwickler welche das
  14. Web als Anwendungsplattform verwenden wollen.
  15. </para>
  16. <para>
  17. Das Akt der Interaktion mit einer Web Anwendung wird typischerweise definiert von der
  18. Summe aller Anfragen die an den Web Server gesendet werden. Da es viele Konsumenten
  19. gibt die simultan bedient werden, muss die Anwendung auswählen welche Anfragen zu
  20. welchem Benutzer gehören. Diese Anfragen sind typischerweise als "session" bekannt.
  21. </para>
  22. <para>
  23. In <acronym>PHP</acronym> wurde das Session Problem durch die Session Erweiterung gelöst
  24. welche eine Form der Statusverfolgung, typische Cookies und eine Form des lokalen
  25. Speichers verwendet der über die Superglobale $_SESSION bekanntgemacht wird. Im Zend
  26. Framework fügt die Komponente <classname>Zend_Session</classname> zusätzliche Vorteile
  27. zu <acronym>PHP</acronym>'s Session Erweiterung hinzu, welche es einfacher machen diese
  28. zu verwenden und auf objekt-orientierten Anwendungen beruht.
  29. </para>
  30. </sect2>
  31. <sect2 id="learning.multiuser.sessions.basic-usage">
  32. <title>Grundsätzliche Verwendung von Zend_Session</title>
  33. <para>
  34. Die Komponente <classname>Zend_Session</classname> ist sowohl ein Session Manager als
  35. auch eine <acronym>API</acronym> für das Speichern von Daten im Session Objekt für eine
  36. Langzeit-Verfügbarkeit. Die <acronym>API</acronym> von
  37. <classname>Zend_Session</classname> ist für das Managen der Optionen und des Verhaltens
  38. einer Session, wie Optionen, Starten und Stoppen einer Session, und
  39. <classname>Zend_Session_Namespace</classname> ist das aktuelle Objekt welches zum
  40. Speichern der Daten verwendet wird.
  41. </para>
  42. <para>
  43. Wärend es generell eine gute Praxis ist eine Session im Bootstrap Prozess zu starten,
  44. ist dies generell nicht notwendig da alle Sessions bei der ersten Erstellung eines
  45. <classname>Zend_Session_Namespace</classname> Objekts automatisch gestartet werden.
  46. </para>
  47. <para>
  48. <classname>Zend_Application</classname> ist in der Lage
  49. <classname>Zend_Session</classname> als Teil des
  50. <classname>Zend_Application_Resource</classname> Systems zu konfigurieren. Um das zu
  51. verwenden, nehmen wir an dass das Projekt <classname>Zend_Application</classname> für
  52. das Bootstrappen verwendet. Man würde den folgenden Code in der Datei application.ini
  53. hinzufügen:
  54. </para>
  55. <programlisting language="php"><![CDATA[
  56. resources.session.save_path = APPLICATION_PATH "/../data/session"
  57. resources.session.use_only_cookies = true
  58. resources.session.remember_me_seconds = 864000
  59. ]]></programlisting>
  60. <para>
  61. Wie man sieht sind die übergebenen Optionen die gleichen Optionen welche man in der
  62. ext/session Erweiterung von <acronym>PHP</acronym> erwarten würde zu finden. Diese
  63. Optionen stellen den Pfad zu den Session Dateien ein in dem Daten des Projekts
  64. gespeichert werden. Da <acronym>INI</acronym> Dateien zusätzlich Konstanten verwenden
  65. können, wird das obige die Konstante APPLICATION_PATH verwenden und relativ auf das
  66. Verzeichnis der Sessiondaten zeigen.
  67. </para>
  68. <para>
  69. Die meisten Zend Framework Komponenten welche Sessions verwenden benötigen nichts
  70. zusätzliches um <classname>Zend_Session</classname> zu verwenden. An diesem Punkt
  71. verwendet man entweder eine Komponente welche <classname>Zend_Session</classname>
  72. verwendet, oder startet das Speichern eigener Daten in einer Session mit
  73. <classname>Zend_Session_Namespace</classname>.
  74. </para>
  75. <para>
  76. <classname>Zend_Session_Namespace</classname> ist eine einfache Klasse welche auf Daten
  77. über eine einfach zu verwendende <acronym>API</acronym> in der von
  78. <classname>Zend_Session</classname> gemanagten superglobalen $_SESSION verweist. Der
  79. Grund warum es <classname>Zend_Session_Namespace</classname> genannt wird ist, das es
  80. die Daten in $_SESSION effektiv namespaced, und es so mehreren Komponenten und Objekten
  81. erlaubt Daten sicher zu speichern und zu empfangen. Im folgenden Code sehen wir wie ein
  82. einfacher hochzählender Counter für Sessions erstellt werden kann der bei 1000 anfängt
  83. und sich selbst nach 1999 zurücksetzt.
  84. </para>
  85. <programlisting language="php"><![CDATA[
  86. $mysession = new Zend_Session_Namespace('mysession');
  87. if (!isset($mysession->counter)) {
  88. $mysession->counter = 1000;
  89. } else {
  90. $mysession->counter++;
  91. }
  92. if ($mysession->counter > 1999) {
  93. unset($mysession->counter);
  94. }
  95. ]]></programlisting>
  96. <para>
  97. Wie man oben sieht verwendet das Session Namespace Objekt die magischen __get, __set,
  98. __isset, und __unset um die einfache und flüssige Interaktion mit der Session er
  99. erlauben. Die Information welche im obigen Beispiel gespeichert wird, wird unter
  100. $_SESSION['mysession']['counter'] gespeichert.
  101. </para>
  102. </sect2>
  103. <sect2 id="learning.multiuser.sessions.advanced-usage">
  104. <title>Gehobenere Verwendung von Zend_Session</title>
  105. <para>
  106. Wenn man zusätzlich den DbTable Speicher Handler für <classname>Zend_Session</classname>
  107. verwenden will, dann kann man den folgenden Code in der application.ini hinzufügen:
  108. </para>
  109. <programlisting language="php"><![CDATA[
  110. resources.session.saveHandler.class = "Zend_Session_SaveHandler_DbTable"
  111. resources.session.saveHandler.options.name = "session"
  112. resources.session.saveHandler.options.primary.session_id = "session_id"
  113. resources.session.saveHandler.options.primary.save_path = "save_path"
  114. resources.session.saveHandler.options.primary.name = "name"
  115. resources.session.saveHandler.options.primaryAssignment.sessionId = "sessionId"
  116. resources.session.saveHandler.options.primaryAssignment.sessionSavePath = "sessionSavePath"
  117. resources.session.saveHandler.options.primaryAssignment.sessionName = "sessionName"
  118. resources.session.saveHandler.options.modifiedColumn = "modified"
  119. resources.session.saveHandler.options.dataColumn = "session_data"
  120. resources.session.saveHandler.options.lifetimeColumn = "lifetime"
  121. ]]></programlisting>
  122. </sect2>
  123. </sect1>