Zend_Session-GlobalSessionManagement.xml 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438
  1. <!-- EN-Revision: 12759 -->
  2. <sect1 id="zend.session.global_session_management">
  3. <title>Gestion générale de la session</title>
  4. <para>Le comportement des sessions peut être modifié en utilisant les méthodes statiques de la classe Zend_Session.
  5. Il s'agit du comportement global des sessions dans toute l'application, incluant la configuration des <ulink
  6. url="http://www.php.net/session#session.configuration">options usuelles offertes par ext/session</ulink>, ceci en
  7. utilisant <classname>Zend_Session::setOptions()</classname>. Ainsi, des problèmes de sécurité peuvent apparaître si vous
  8. utilisez mal le support de stockage des sessions <code>save_path</code> ou encore si vous négligez le cookie utilisé
  9. par ext/session.</para>
  10. <sect2 id="zend.session.global_session_management.configuration_options">
  11. <title>Options de configuration</title>
  12. <para>Lors de la création du premier namespace de session, Zend_Session va automatiquement démarrer la session
  13. PHP, sauf si celle-ci a été démarrée avec <link
  14. linkend="zend.session.advanced_usage.starting_a_session"><classname>Zend_Session::start()</classname></link> auparavant.
  15. La session PHP résultante utilisera les options de configuration par défaut de Zend_Session, sauf si ceux-ci ont
  16. été modifiés à l'aide de <classname>Zend_Session::setOptions()</classname>.</para>
  17. <para>Pour assigner une option de configuration, passez son nom (la partie qui suit "<code>session.</code>" dans
  18. les options de configuration de ext/session) comme clé au tableau passé à
  19. <classname>Zend_Session::setOptions()</classname>. La valeur correspondante dans le tableau sera alors utilisée comme
  20. valeur de l'option. Si vous omettez une option, alors celles par défaut recommandées par Zend_Session seront
  21. utilisées, sinon si elles n'existent pas, les valeurs par défaut de php.ini. Les retours et les idées quant aux
  22. "options recommandées" sont appréciées et peuvent être envoyées à <ulink
  23. url="mailto:fw-auth@lists.zend.com">fw-auth@lists.zend.com</ulink>.</para>
  24. <example id="zend.session.global_session_management.setoptions.example">
  25. <title>Utiliser Zend_Config pour configurer Zend_Session</title>
  26. <para>Pour configurer le composant en utilisant un objet <link
  27. linkend="zend.config.adapters.ini"><classname>Zend_Config_Ini</classname></link>, ajoutez ces paramètres au fichier
  28. INI en question:</para>
  29. <programlisting role="ini"><![CDATA[
  30. ; Paramètres de production
  31. [production]
  32. ; bug_compat_42
  33. ; bug_compat_warn
  34. ; cache_expire
  35. ; cache_limiter
  36. ; cookie_domain
  37. ; cookie_lifetime
  38. ; cookie_path
  39. ; cookie_secure
  40. ; entropy_file
  41. ; entropy_length
  42. ; gc_divisor
  43. ; gc_maxlifetime
  44. ; gc_probability
  45. ; hash_bits_per_character
  46. ; hash_function
  47. ; name doit être unique pour chaque application partageant le même nom de domaine
  48. name = UNIQUE_NAME
  49. ; referer_check
  50. ; save_handler
  51. ; save_path
  52. ; serialize_handler
  53. ; use_cookies
  54. ; use_only_cookies
  55. ; use_trans_sid
  56. ; remember_me_seconds = <integer seconds>
  57. ; strict = on|off
  58. ; Development hérite de production, mais redéfinit certaines valeurs
  59. [development : production]
  60. ; N'oubliez pas de créer ce dossier et d'attribuer à PHP les droits 'rwx'.
  61. save_path = /home/myaccount/zend_sessions/myapp
  62. use_only_cookies = on
  63. ; Le cookie de session durera 10 jours
  64. remember_me_seconds = 864000
  65. ]]></programlisting>
  66. <para>Ensuite, chargez ce fichier de configuration, et passez sa représentation tableau à
  67. <classname>Zend_Session::setOptions()</classname>:</para>
  68. <programlisting role="php"><![CDATA[
  69. $config = new Zend_Config_Ini('myapp.ini', 'development');
  70. require_once 'Zend/Session.php';
  71. Zend_Session::setOptions($config->toArray());
  72. ]]></programlisting>
  73. </example>
  74. <para>La plupart des options ne nécessitent pas d'explications étant donné qu'elles font parti des options de
  75. ext/session, documentées dans le manuel officiel de PHP, cependant les options particulières méritent une
  76. description: <itemizedlist mark="opencircle">
  77. <listitem>
  78. <para>bool <code>strict</code> : désactive le démarrage automatique de <classname>Zend_Session</classname>
  79. lorsque <code>new Zend_Session_Namespace()</code> est utilisé.</para>
  80. </listitem>
  81. <listitem>
  82. <para>int <code>remember_me_seconds</code> : temps de vie du cookie de session, une fois le
  83. navigateur client fermé.</para>
  84. </listitem>
  85. <listitem>
  86. <para>string <code>save_path</code> : Cette valeur est dépendante du système sur lequel PHP est
  87. lancé. Un <emphasis role="strong">chemin absolu</emphasis> vers un dossier lisible et écrivable à
  88. PHP devrait être utilisé (dans le cas d'utilisation d'un dossier pour le support des sessions). Si
  89. le chemin n'est pas pleinement accessible à PHP, <classname>Zend_Session</classname> lancera une exception à
  90. son démarrage (lorsque <code>start()</code> est appelée.</para>
  91. <note>
  92. <title>Attention aux failles de sécurité</title>
  93. <para>Si le chemin des sessions est accessible en lecture à d'autres applications, alors le vol
  94. de session peut être possible. Si le dossier est accessible en écriture à d'autres applications,
  95. alors <ulink url="http://en.wikipedia.org/wiki/Session_poisoning">l'empoisonnement de
  96. sessions</ulink> peut être possible. SI le chemin est partagé avec d'autres utilisateurs ou
  97. d'autres applications PHP, plusieurs problèmes de sécurité peuvent apparaître, incluant le vol
  98. de session, et les collisions de ramasse-miette (garbage collection) (Un process d'une autre
  99. application PHP déclenche une collecte sur vos fichiers de session).</para>
  100. <para>Par exemple, un pirate peut visiter le site d'une victime pour obtenir un cookie de
  101. session. Il modifie ensuite le chemin du cookie afin que celui-ci soit envoyé à sa propre
  102. application (en partage sur le même serveur que le votre), et il exécute
  103. <code>var_dump($_SESSION)</code>. Il obtient alors des informations sur les variables de session
  104. que vous stockez, et il peut les modifier pour retourner sur votre site. L'empoisonnement a eu
  105. lieu. Même si deux applications sur le même serveur ne partagent pas le même dossier
  106. <code>save_path</code>, si celui-ci est devinable, l'attaquant peut alors l'utiliser sur sa
  107. propre application et dans certaines configurations de PHP, accéder à la session de
  108. l'application victime. La valeur du <code>save_path</code> ne doit pas être rendue publique ou
  109. devinable, le dossier doit se trouver dans un endroit isolé et sécurisé.</para>
  110. </note>
  111. </listitem>
  112. <listitem>
  113. <para>string <code>name</code> - La valeur doit être choisie de manière <emphasis
  114. role="strong">unique</emphasis> pour chaque application.</para>
  115. <note>
  116. <title>Risque de sécurité</title>
  117. <para>Si la valeur <code>php.ini</code> de <code>session.name</code> n'est pas unique (celle par
  118. défaut "PHPSESSID"), et qu'il existe plusieurs applications accessible via le même domaine,
  119. alors elle partagerons leurs données pour les visiteurs. Aussi, des problème de corruption
  120. peuvent apparaître.</para>
  121. </note>
  122. </listitem>
  123. <listitem>
  124. <para>bool <code>use_only_cookies</code> - Afin d'éviter d'autres failles de sécurité (concernant le
  125. trans-sid), ne changez pas cette option. <note>
  126. <title>Risque de sécurité</title>
  127. <para>Si cette option n'est pas activée, un attaquant peut facilement fixer un id de session
  128. d'une victime en lui envoyant des liens tels que
  129. <code>http://www.example.com/index.php?PHPSESSID=fixed_session_id</code>. La fixation
  130. fonctionne si la victime n'a pas déjà un identifiant de session sur le site example.com.
  131. Lorsque la victime utilise un identifiant de session qu'un attaquant connaît, il peut alors
  132. se faire passer pour elle.</para>
  133. </note></para>
  134. </listitem>
  135. </itemizedlist></para>
  136. </sect2>
  137. <sect2 id="zend.session.global_session_management.headers_sent">
  138. <title>L'erreur: "Headers Already Sent"</title>
  139. <para>Si vous voyez l'erreur, "Cannot modify header information - headers already sent", ou, "You must call ...
  140. before any output has been sent to the browser; output started in ...", analysez tout de suite d'où vient la
  141. fuite grâce au message d'erreur. Toute action entraînant un envoi d'en-têtes HTTP, comme envoyer un cookie, doit
  142. être effectuée avant d'envoyer du contenu standard (non bufferisé), sauf si le buffer de sortie de PHP est
  143. activé.</para>
  144. <itemizedlist mark="opencircle">
  145. <listitem>
  146. <para>Utiliser <ulink url="http://php.net/outcontrol">le buffer de sortie</ulink> résout souvent le
  147. problème, et peut améliorer les performances. Par exemple, une valeur <code>php.ini</code>,
  148. "<code>output_buffering = 65535</code>" active un buffer de 64K. Même si le buffer de sortie peut
  149. améliorer les performances lorsqu'il est bien configuré, se reposer sur lui concernant les erreurs
  150. "headers already sent" n'est pas suffisant. En effet, sa taille peut être dépassé entraînant son vidage,
  151. et le problème revient.</para>
  152. </listitem>
  153. <listitem>
  154. <para>Aussi, il convient d'organiser l'application de manière à ce que les envois d'en-tête se passent
  155. avant l'envoi de contenu.</para>
  156. </listitem>
  157. <listitem>
  158. <para>Si Zend_Session produit ce message, cherchez la cause grâce au message d'erreur indiquant d'où
  159. provient "la fuite". Aussi, des opérations comme <code>destroy()</code> envoient des en-têtes concernant
  160. la destruction du cookie de session. Si vous ne voulez pas ces informations envoyées, utilisez alors
  161. <code>destroy(false)</code>.</para>
  162. </listitem>
  163. <listitem>
  164. <para>Supprimez tous les balises de fermeture "<code>?&gt;</code>", si elles terminent du code PHP.
  165. Elles sont facultatives et les nouvelles lignes blanches éventuelles en fin de fichier ne seront pas
  166. envoyées, car parsées par PHP.</para>
  167. </listitem>
  168. </itemizedlist>
  169. </sect2>
  170. <sect2 id="zend.session.global_session_management.session_identifiers">
  171. <title>Identifiants de session</title>
  172. <para>Les bonnes pratiques d'utilisation des sessions avec Zend Framework passent par un cookie, plutôt que se reporter à
  173. l'URL concernant l'identifiant de session. Par défaut, le composant Zend_Session est bloqué sur l'utilisation
  174. unique du cookie comme moyen de propagation de l'identifiant de session. La session PHP va alors utiliser cet
  175. identifiant de manière à identifier de manière unique chaque client (navigateur) qui s'y connecte, et maintenir
  176. un état entre leurs transactions, donnant l'impression de conservation de données. Zend_Session_* utilise alors
  177. le tableau (<code>$_SESSION</code>) et vous y donne accès d'une manière objet élégante. Attention, si un
  178. attaquant arrive à accéder au cookie de session d'une victime, il pourra alors tromper le serveur, et se faire
  179. passer pour la victime. Ce comportement n'est pas unique à PHP, ni à Zend Framework, mais au Web en général, et
  180. au protocole HTTP. La méthode <code>regenerateId()</code> permet de changer l'identifiant de session stocké dans
  181. le cookie du client, par un autre, en théorie imprévisible. Notez que par la suite, nous confondons les termes
  182. 'client' et 'navigateur', même si ceci n'est pas tout à fait juste.</para>
  183. <para>Changer l'identifiant de session permet d'aider contre le vol de données. Si un attaquant possède
  184. l'identifiant d'une victime, le changer ne changera rien pour la victime, mais provoquera une invalidation de la
  185. session de l'attaquant, qui ne connaît alors pas la nouvelle valeur de l'identifiant de session. Non seulement
  186. <code>regenerateId()</code> change l'identifiant de session, mais en plus il migre les données de l'ancien
  187. identifiant vers le nouveau, invalidant totalement l'ancien.</para>
  188. <para>Quand régénérer cet identifiant ? En théorie, mettre <classname>Zend_Session::regenerateId()</classname> en
  189. bootstrap est la manière la plus adaptée pour sécuriser une session. Cependant, ceci a un coût non négligeable,
  190. car il faut alors à chaque fois régénérer un identifiant, et renvoyer un nouveau cookie au client. Il est alors
  191. nécessaire de déterminer les situations 'à risque', et régénérer alors l'identifiant de session dans de telles
  192. situations. Ces situations peuvent être par exemple l'authentification d'un client, ou encore son élévation de
  193. privilèges. Si vous appelez <code>rememberMe()</code>, n'appelez alors pas <code>regenerateId()</code>, car elle
  194. sera appelée de manière automatique.</para>
  195. <sect3 id="zend.session.global_session_management.session_identifiers.hijacking_and_fixation">
  196. <title>Vol de session et fixation</title>
  197. <para>Éviter <ulink url="http://en.wikipedia.org/wiki/Cross_site_scripting">les failles cross-site script
  198. (XSS) </ulink> aide à éviter le vol de session. Selon <ulink url="http://secunia.com/">Secunia</ulink>, les
  199. problèmes XSS sont fréquents, quelque soit le langage utilisé pour créer l'application Web. Plutôt que de se
  200. considérer invulnérable, considérez votre application de manière à minimiser l'impact d'une éventuelle
  201. faille XSS. Avec XSS, l'attaquant n'a pas besoin d'accéder au trafic de la victime, sur le réseau. Si la
  202. victime possède déjà un cookie de session, javascript peut permettre à l'attaquant de voler celui-ci, et
  203. donc la session. Dans le cas de victimes sans cookie, l'attaquant peut utiliser XSS pour créer un cookie
  204. avec un session id connu, et l'envoyer à la victime, fixant ainsi la session. L'attaquant peut dès lors
  205. visualiser toute la session de la victime au fur et à mesure que celle-ci surfe, sans se rendre compte de
  206. rien. Cependant, l'attaquant ne peut modifier l'état de la session du coté PHP ( la fermer par exemple ),
  207. sauf si l'application possède d'autres vulnérabilités (CSRF), ou si le <code>save_path</code> est
  208. modifiable.</para>
  209. <para>En elle-même, la fonction <classname>Zend_Session::regenerateId()</classname> utilisée à la première utilisation
  210. de la session, ne protège pas contre la fixation. Ceci peut paraître contradictoire, mais un attaquant peut
  211. très bien initialiser une session de lui-même, qui sera alors rafraîchie (régénérée), et dont il connaîtra
  212. alors l'identifiant. Il n'aura plus qu'à fixer cet identifiant dans un javascript pour qu'une victime
  213. l'utilise, et la faille est à nouveau présente. Aussi, fixer la session par l'URL est extrêmement simple,
  214. mais n'est possible que lorsque <code>use_only_cookies = off</code>.</para>
  215. <para>Le vol de session ne peut se remarqué que si vous arrivez à faire la différence entre l'attaquant et
  216. la victime. Ce n'est pas chose simple, et les techniques utilisées ne sont jamais fiables à 100%. L'IP peut
  217. être utilisée, même si celle-ci n'est pas totalement fiable. Les en-têtes du navigateur Web, eux, le sont
  218. déjà plus (lorsque 2 requêtes successives avec le même identifiant de session arrivent au serveur, si l'une
  219. prétend être issue de FireFox et l'autre d'Opéra, alors très probablement qu'il s'agit de 2 personnes
  220. différentes, mais ayant le même identifiant de session. Typiquement : l'attaquant et sa victime.) Il est
  221. très difficile de différencier l'attaquant et la victime, c'est d'ailleurs impossible dans la suite de cas
  222. suivants : <itemizedlist mark="opencircle">
  223. <listitem>
  224. <para>l'attaquant initialise une session pour obtenir un identifiant valide.</para>
  225. </listitem>
  226. <listitem>
  227. <para>l'attaquant utilise une faille XSS pour envoyer un cookie de session à une victime,
  228. possédant son propre identifiant de session (fixation).</para>
  229. </listitem>
  230. <listitem>
  231. <para>l'attaquant et la victime utilisent le même navigateur, sont derrière le même
  232. proxy.</para>
  233. </listitem>
  234. </itemizedlist> Le code suivant permet d'empêcher l'attaquant de connaître l'identifiant de session de
  235. la victime (sauf s'il arrive à le fixer):</para>
  236. <example id="zend.session.global_session_management.session_identifiers.hijacking_and_fixation.example">
  237. <title>Vol et fixation, protections</title>
  238. <programlisting role="php"><![CDATA[
  239. $defaultNamespace = new Zend_Session_Namespace();
  240. if (!isset($defaultNamespace->initialized)) {
  241. Zend_Session::regenerateId();
  242. $defaultNamespace->initialized = true;
  243. }
  244. ]]></programlisting>
  245. </example>
  246. </sect3>
  247. </sect2>
  248. <sect2 id="zend.session.global_session_management.rememberme">
  249. <title><code>rememberMe(integer $seconds)</code></title>
  250. <para>Par défaut, la session se termine lorsque le client ferme son navigateur. Il peut cependant être
  251. nécessaire de faire en sorte que même après la fermeture, le cookie de session persiste un certain temps dans le
  252. navigateur. Utilisez <classname>Zend_Session::rememberMe()</classname> avant tout démarrage de la session, afin de
  253. spécifier à celle-ci qu'elle devra utiliser un cookie persistant du coté du client. Ce cookie persistera alors
  254. $seconds secondes. Si vous ne précisez pas de temps, <code>remember_me_seconds</code>, sera utilisé. Cette
  255. valeur se paramètre d'ailleurs au moyen de <classname>Zend_Session::setOptions()</classname>.</para>
  256. </sect2>
  257. <sect2 id="zend.session.global_session_management.forgetme">
  258. <title><code>forgetMe()</code></title>
  259. <para>Cette fonction est analogue à <code>rememberMe()</code> sauf qu'elle demande au cookie de session du
  260. navigateur client d'être détruit à la fermeture de celui-ci (et non éventuellement après X temps).</para>
  261. </sect2>
  262. <sect2 id="zend.session.global_session_management.sessionexists">
  263. <title><code>sessionExists()</code></title>
  264. <para>Utilisez cette méthode afin de savoir si une session existe pour le client (la requête) actuel. Ceci doit
  265. être utilisé avant le démarrage de la session.</para>
  266. </sect2>
  267. <sect2 id="zend.session.global_session_management.destroy">
  268. <title><code>destroy(bool $remove_cookie = true, bool $readonly = true)</code></title>
  269. <para><classname>Zend_Session::destroy()</classname> détruit la session et toutes les données la concernant. Cependant,
  270. aucune variable dans PHP n'est affectée, donc vos namespaces de session (instances de
  271. <classname>Zend_Session_Namespace</classname>) restent lisibles. Pour compléter la "déconnexion", laissez le premier
  272. paramètre à <code>true</code> (par défaut), demandant l'expiration du cookie de session du client.
  273. <code>$readonly</code> permet d'empêcher la future création de namespaces (new
  274. <classname>Zend_Session_Namespace</classname>) ou des opérations d'écriture via <classname>Zend_Session</classname>.</para>
  275. <para>Si vous voyez le message d'erreur "Cannot modify header information - headers already sent", alors tentez
  276. de ne pas utiliser <code>true</code> comme valeur du premier argument (ceci demande l'expiration du cookie de
  277. session, ou voyez <xref linkend="zend.session.global_session_management.headers_sent" />. Ainsi,
  278. <classname>Zend_Session::destroy(true)</classname> doit être appelé avant tout envoi d'en-tête HTTP par PHP, ou alors la
  279. bufferisation de sortie doit être activée (sans que celui-ci ne déborde).</para>
  280. <note>
  281. <title>Exception</title>
  282. <para>Par défaut, <code>$readonly</code> est activé et toute opération future d'écriture dans la session
  283. lèvera une exception.</para>
  284. </note>
  285. </sect2>
  286. <sect2 id="zend.session.global_session_management.stop">
  287. <title><code>stop()</code></title>
  288. <para>Cette méthode ne fait rien d'autre que de verrouiller la session en écriture. Tout appel futur d'écriture
  289. via des instances de <classname>Zend_Session_Namespace</classname> ou <classname>Zend_Session</classname> lèvera une
  290. exception.</para>
  291. </sect2>
  292. <sect2 id="zend.session.global_session_management.writeclose">
  293. <title><code>writeClose($readonly = true)</code></title>
  294. <para>Ferme la session coté serveur, soit enregistre les variables de session dans le support, et détache
  295. <code>$_SESSION</code> de son support de stockage. Le paramètre optionnel <code>$readonly</code> empêche alors
  296. toute future écriture via <classname>Zend_Session</classname> ou <classname>Zend_Session_Namespace</classname>. Ces écritures
  297. lèveront une exception.</para>
  298. <note>
  299. <title>Exception</title>
  300. <para>Par défaut, <code>$readonly</code> est activé, et donc tout appel d'écriture futur dans la session
  301. générera une exception. Certaines applications peuvent nécessiter de conserver un accès en écriture dans
  302. <code>$_SESSION</code>, même si ce tableau a été déconnecté de son support de stockage avec
  303. <code>session_write_close()</code>. Ainsi, Zend Framework propose cette option en passant à
  304. <code>false</code> la valeur de <code>$readonly</code>, mais ce n'est pas une pratique conseillée.</para>
  305. </note>
  306. </sect2>
  307. <sect2 id="zend.session.global_session_management.expiresessioncookie">
  308. <title><code>expireSessionCookie()</code></title>
  309. <para>Cette méthode envoie un cookie d'identifiant de session périmé au client. Quelque fois cette technique est
  310. utilisée pour déconnecter le client de sa session.</para>
  311. </sect2>
  312. <sect2 id="zend.session.global_session_management.savehandler">
  313. <title><code>setSaveHandler(Zend_Session_SaveHandler_Interface $interface)</code></title>
  314. <para>Cette méthode propose une correspondance orientée objet de <ulink
  315. url="http://php.net/session_set_save_handler"><code>session_set_save_handler()</code></ulink>.</para>
  316. </sect2>
  317. <sect2 id="zend.session.global_session_management.namespaceisset">
  318. <title><code>namespaceIsset($namespace)</code></title>
  319. <para>Cette méthode permet de déterminer si un namespace existe dans la session.</para>
  320. <note>
  321. <title>Exception</title>
  322. <para>Une exception sera levée si la session n'est pas lisible (n'a pas été démarrée).</para>
  323. </note>
  324. </sect2>
  325. <sect2 id="zend.session.global_session_management.namespaceunset">
  326. <title><code>namespaceUnset($namespace)</code></title>
  327. <para>Utilisez <classname>Zend_Session::namespaceUnset($namespace)</classname> pour détruire un namespace entier de la
  328. session. Comme pour les tableaux PHP, si le tableau est détruit, les objets à l'intérieur ne le sont pas s'il
  329. reste des références vers eux dans d'autres tableaux ou objets toujours accessibles. Ainsi
  330. <code>namespaceUnset()</code> ne détruit pas "en profondeur" la variable de session associée au namespace. Voyez
  331. <ulink url="http://php.net/references">les références en PHP</ulink> pour plus d'infos.</para>
  332. <note>
  333. <title>Exception</title>
  334. <para>Une exception sera envoyée si le namespace n'est pas écrivable (après un appel à
  335. <code>destroy()</code>).</para>
  336. </note>
  337. </sect2>
  338. <sect2 id="zend.session.global_session_management.namespaceget">
  339. <title><code>namespaceGet($namespace)</code></title>
  340. <para>Déprécié: Utilisez <code>getIterator()</code> dans <classname>Zend_Session_Namespace</classname>. Cette méthode
  341. retourne un tableau du contenu du namespace $namespace. Si vous avez une raison de conserver cette méthode,
  342. faites nous part de vos remarques à <ulink
  343. url="mailto:fw-auth@lists.zend.com">fw-auth@lists.zend.com</ulink>.</para>
  344. <note>
  345. <title>Exception</title>
  346. <para>Une exception sera levée si la session n'est pas lisible (n'a pas été démarrée).</para>
  347. </note>
  348. </sect2>
  349. <sect2 id="zend.session.global_session_management.getiterator">
  350. <title><code>getIterator()</code></title>
  351. <para><code>getIterator()</code> retourne un <code>ArrayObject</code> contenant tous les noms des namespaces de
  352. session.</para>
  353. <note>
  354. <title>Exception</title>
  355. <para>Une exception sera levée si la session n'est pas lisible (n'a pas été démarrée).</para>
  356. </note>
  357. </sect2>
  358. </sect1>