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