multiuser-sessions.xml 6.7 KB

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