Zend_Session-BasicUsage.xml 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- EN-Revision: 12759 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.session.basic_usage">
  5. <title>Usage basique</title>
  6. <para>Les instances <classname>Zend_Session_Namespace</classname> fournissent l'API primaire pour manipuler les données de
  7. session dans Zend Framework. Les espaces de noms sont utilisés pour isoler toutes les données de session, bien
  8. qu'un espace de noms par défaut existe pour ceux qui veulent juste un endroit pour stocker toutes leurs données de
  9. session. <classname>Zend_Session</classname> utilise ext/session et sa superglobale spéciale <code>$_SESSION</code> comme
  10. mécanisme de stockage pour les données d'état de session. Bien que <code>$_SESSION</code> est toujours disponible
  11. dans l'espace global de PHP, les développeurs devraient s'abstenir d'accéder directement à elle, alors que
  12. <classname>Zend_Session</classname> et <classname>Zend_Session_Namespace</classname> fournissent plus efficacement et plus solidement
  13. leur suite de fonctionnalités liées à session.</para>
  14. <para>Chaque instance de <classname>Zend_Session_Namespace</classname> correspond à une entrée dans le tableau de la
  15. superglobale <code>$_SESSION</code>, où l'espace de noms est utilisée comme une clé. <programlisting
  16. role="php"><![CDATA[
  17. $monNamespace = new Zend_Session_Namespace('monNamespace');
  18. // $monNamespace corresponds to $_SESSION['monNamespace']
  19. ]]></programlisting> Il est possible d'utiliser
  20. <classname>Zend_Session</classname> conjointement avec d'autre code utilisant directement <code>$_SESSION</code>. Cependant,
  21. pour éviter les problèmes, il est fortement recommandé que ce code utilise seulement les parties de
  22. <code>$_SESSION</code> ne correspondant pas aux instances de <classname>Zend_Session_Namespace</classname>.</para>
  23. <sect2 id="zend.session.basic_usage.basic_examples">
  24. <title>Tutoriel d'exemples</title>
  25. <para>Si aucun espace de noms n'est spécifié lors de l'instanciation de <classname>Zend_Session_Namespace</classname>,
  26. toutes les données sont stockées de manière transparente dans un espace de noms appelé "<code>Default</code>".
  27. <classname>Zend_Session</classname> n'est pas prévu pour fonctionner directement sur le contenu des conteneurs des espaces
  28. de noms. Au lieu de cela, nous utilisons <classname>Zend_Session_Namespace</classname>. L'exemple ci-dessous montre
  29. l'utilisation de cet espace de noms par défaut, en montrant comment compter le nombre de fois qu'un utilisateur
  30. a vu une page sur le site Web. Pour tester cet exemple, ajouter le code suivant à votre fichier d'amorçage ZF
  31. :</para>
  32. <example id="zend.session.basic_usage.basic_examples.example.counting_page_views">
  33. <title>Compter le nombre de pages vues</title>
  34. <programlisting role="php"><![CDATA[
  35. $defaultNamespace = new Zend_Session_Namespace('Default');
  36. if (isset($defaultNamespace->numberOfPageRequests)) {
  37. $defaultNamespace->numberOfPageRequests++;
  38. // ceci s'incrémente à chaque chargement de page.
  39. } else {
  40. $defaultNamespace->numberOfPageRequests = 1;
  41. // première page
  42. }
  43. echo "Page demandée lors de cette session : ",
  44. $defaultNamespace->numberOfPageRequests;
  45. ]]></programlisting>
  46. </example>
  47. <para>Quand de multiples modules utilisent des instances de <classname>Zend_Session_Namespace</classname> ayant différents
  48. espaces de noms, chaque module obtient une encapsulation pour ses propres données de session. Le constructeur de
  49. <classname>Zend_Session_Namespace</classname> peut recevoir un paramètre facultatif <code>$namespace</code>, qui permet
  50. aux développeurs la partition des données de session dans des espaces de noms séparés. Les espaces de noms
  51. fournissent une manière efficace et populaire de protéger un sous-ensemble de données de session contre un
  52. changement accidentel dû à des collisions de noms.</para>
  53. <para>Les noms des espaces de noms sont limités à des chaînes de caractères PHP non-vides qui ne commencent par
  54. un tiret-bas ("<code>_</code>"). De plus, seuls les composants coeur de Zend Framework devraient employer un nom
  55. d'espace de noms commençant par "<code>Zend</code>".</para>
  56. <example id="zend.session.basic_usage.basic_examples.example.namespaces.new">
  57. <title>Nouvelle méthode : les espaces de noms évitent les collisions</title>
  58. <programlisting role="php"><![CDATA[
  59. // Dans le composant Zend_Auth
  60. $authNamespace = new Zend_Session_Namespace('Zend_Auth');
  61. $authNamespace->user = "monusername";
  62. // Dans un composant service web
  63. $webServiceNamespace = new Zend_Session_Namespace('Un_Service_Web');
  64. $webServiceNamespace->user = "monwebusername";
  65. ]]></programlisting>
  66. </example>
  67. <para>L'exemple ci-dessus réalise la même chose que celui ci-dessous, excepté que les objets de session
  68. ci-dessus préserve l'encapsulation des données de session dans leur espace de noms respectif.</para>
  69. <example id="zend.session.basic_usage.basic_examples.example.namespaces.old">
  70. <title>Ancienne méthode : accès aux sessions PHP</title>
  71. <programlisting role="php"><![CDATA[
  72. $_SESSION['Zend_Auth']['user'] = "monusername";
  73. $_SESSION['Un_Service_Web']['user'] = "monwebusername";
  74. ]]></programlisting>
  75. </example>
  76. </sect2>
  77. <sect2 id="zend.session.basic_usage.iteration">
  78. <title>Énumérer les espaces de noms de session</title>
  79. <para><classname>Zend_Session_Namespace</classname> fournit une <ulink
  80. url="http://www.php.net/~helly/php/ext/spl/interfaceIteratorAggregate.html">interface IteratorAggregate</ulink>
  81. complète, incluant le support de l'instruction <code>foreach</code> :</para>
  82. <example id="zend.session.basic_usage.iteration.example">
  83. <title>Énumération des sessions</title>
  84. <programlisting role="php"><![CDATA[
  85. $unNamespace =
  86. new Zend_Session_Namespace('un_namespace_avec_des_donnes_presentes');
  87. foreach ($unNamespace as $index => $valeur) {
  88. echo "unNamespace->$index = '$valeur';\n";
  89. }
  90. ]]></programlisting>
  91. </example>
  92. </sect2>
  93. <sect2 id="zend.session.basic_usage.accessors">
  94. <title>Accesseurs pour les espaces de noms de session</title>
  95. <para><classname>Zend_Session_Namespace</classname> implémente <code>__get()</code>, <code>__set()</code>,
  96. <code>__isset()</code>, et <code>__unset()</code>. <ulink
  97. url="http://www.php.net/manual/fr/language.oop5.overloading.php">Les méthodes magiques</ulink> ne devraient pas
  98. être utilisées directement, excepté à l'intérieur d'une sous-classe. Au lieu de cela, utilisez les opérateurs
  99. normaux pour appeler ces méthodes magiques, comme :</para>
  100. <example id="zend.session.basic_usage.accessors.example">
  101. <title>Accéder aux données de session</title>
  102. <programlisting role="php"><![CDATA[
  103. $namespace = new Zend_Session_Namespace();
  104. // Espace de noms par défaut
  105. $namespace->foo = 100;
  106. echo "\$namespace->foo = $namespace->foo\n";
  107. if (!isset($namespace->bar)) {
  108. echo "\$namespace->bar n'existe pas\n";
  109. }
  110. unset($namespace->foo);
  111. ]]></programlisting>
  112. </example>
  113. </sect2>
  114. </sect1>