Zend_Session-GlobalSessionManagement.xml 26 KB

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