Zend_Session-GlobalSessionManagement.xml 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440
  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 role="strong">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
  116. role="strong">unique</emphasis> pour chaque application.</para>
  117. <note>
  118. <title>Risque de sécurité</title>
  119. <para>Si la valeur <code>php.ini</code> de <code>session.name</code> n'est pas unique (celle par
  120. défaut "PHPSESSID"), et qu'il existe plusieurs applications accessible via le même domaine,
  121. alors elle partagerons leurs données pour les visiteurs. Aussi, des problème de corruption
  122. peuvent apparaître.</para>
  123. </note>
  124. </listitem>
  125. <listitem>
  126. <para>bool <code>use_only_cookies</code> - Afin d'éviter d'autres failles de sécurité (concernant le
  127. trans-sid), ne changez pas cette option. <note>
  128. <title>Risque de sécurité</title>
  129. <para>Si cette option n'est pas activée, un attaquant peut facilement fixer un id de session
  130. d'une victime en lui envoyant des liens tels que
  131. <code>http://www.example.com/index.php?PHPSESSID=fixed_session_id</code>. La fixation
  132. fonctionne si la victime n'a pas déjà un identifiant de session sur le site example.com.
  133. Lorsque la victime utilise un identifiant de session qu'un attaquant connaît, il peut alors
  134. se faire passer pour elle.</para>
  135. </note></para>
  136. </listitem>
  137. </itemizedlist></para>
  138. </sect2>
  139. <sect2 id="zend.session.global_session_management.headers_sent">
  140. <title>L'erreur: "Headers Already Sent"</title>
  141. <para>Si vous voyez l'erreur, "Cannot modify header information - headers already sent", ou, "You must call ...
  142. before any output has been sent to the browser; output started in ...", analysez tout de suite d'où vient la
  143. fuite grâce au message d'erreur. Toute action entraînant un envoi d'en-têtes HTTP, comme envoyer un cookie, doit
  144. être effectuée avant d'envoyer du contenu standard (non bufferisé), sauf si le buffer de sortie de PHP est
  145. activé.</para>
  146. <itemizedlist mark="opencircle">
  147. <listitem>
  148. <para>Utiliser <ulink url="http://php.net/outcontrol">le buffer de sortie</ulink> résout souvent le
  149. problème, et peut améliorer les performances. Par exemple, une valeur <code>php.ini</code>,
  150. "<code>output_buffering = 65535</code>" active un buffer de 64K. Même si le buffer de sortie peut
  151. améliorer les performances lorsqu'il est bien configuré, se reposer sur lui concernant les erreurs
  152. "headers already sent" n'est pas suffisant. En effet, sa taille peut être dépassé entraînant son vidage,
  153. et le problème revient.</para>
  154. </listitem>
  155. <listitem>
  156. <para>Aussi, il convient d'organiser l'application de manière à ce que les envois d'en-tête se passent
  157. avant l'envoi de contenu.</para>
  158. </listitem>
  159. <listitem>
  160. <para>Si Zend_Session produit ce message, cherchez la cause grâce au message d'erreur indiquant d'où
  161. provient "la fuite". Aussi, des opérations comme <code>destroy()</code> envoient des en-têtes concernant
  162. la destruction du cookie de session. Si vous ne voulez pas ces informations envoyées, utilisez alors
  163. <code>destroy(false)</code>.</para>
  164. </listitem>
  165. <listitem>
  166. <para>Supprimez tous les balises de fermeture "<code>?&gt;</code>", si elles terminent du code PHP.
  167. Elles sont facultatives et les nouvelles lignes blanches éventuelles en fin de fichier ne seront pas
  168. envoyées, car parsées par PHP.</para>
  169. </listitem>
  170. </itemizedlist>
  171. </sect2>
  172. <sect2 id="zend.session.global_session_management.session_identifiers">
  173. <title>Identifiants de session</title>
  174. <para>Les bonnes pratiques d'utilisation des sessions avec Zend Framework passent par un cookie, plutôt que se reporter à
  175. l'URL concernant l'identifiant de session. Par défaut, le composant Zend_Session est bloqué sur l'utilisation
  176. unique du cookie comme moyen de propagation de l'identifiant de session. La session PHP va alors utiliser cet
  177. identifiant de manière à identifier de manière unique chaque client (navigateur) qui s'y connecte, et maintenir
  178. un état entre leurs transactions, donnant l'impression de conservation de données. Zend_Session_* utilise alors
  179. le tableau (<code>$_SESSION</code>) et vous y donne accès d'une manière objet élégante. Attention, si un
  180. attaquant arrive à accéder au cookie de session d'une victime, il pourra alors tromper le serveur, et se faire
  181. passer pour la victime. Ce comportement n'est pas unique à PHP, ni à Zend Framework, mais au Web en général, et
  182. au protocole HTTP. La méthode <code>regenerateId()</code> permet de changer l'identifiant de session stocké dans
  183. le cookie du client, par un autre, en théorie imprévisible. Notez que par la suite, nous confondons les termes
  184. 'client' et 'navigateur', même si ceci n'est pas tout à fait juste.</para>
  185. <para>Changer l'identifiant de session permet d'aider contre le vol de données. Si un attaquant possède
  186. l'identifiant d'une victime, le changer ne changera rien pour la victime, mais provoquera une invalidation de la
  187. session de l'attaquant, qui ne connaît alors pas la nouvelle valeur de l'identifiant de session. Non seulement
  188. <code>regenerateId()</code> change l'identifiant de session, mais en plus il migre les données de l'ancien
  189. identifiant vers le nouveau, invalidant totalement l'ancien.</para>
  190. <para>Quand régénérer cet identifiant ? En théorie, mettre <classname>Zend_Session::regenerateId()</classname> en
  191. bootstrap est la manière la plus adaptée pour sécuriser une session. Cependant, ceci a un coût non négligeable,
  192. car il faut alors à chaque fois régénérer un identifiant, et renvoyer un nouveau cookie au client. Il est alors
  193. nécessaire de déterminer les situations 'à risque', et régénérer alors l'identifiant de session dans de telles
  194. situations. Ces situations peuvent être par exemple l'authentification d'un client, ou encore son élévation de
  195. privilèges. Si vous appelez <code>rememberMe()</code>, n'appelez alors pas <code>regenerateId()</code>, car elle
  196. sera appelée de manière automatique.</para>
  197. <sect3 id="zend.session.global_session_management.session_identifiers.hijacking_and_fixation">
  198. <title>Vol de session et fixation</title>
  199. <para>Éviter <ulink url="http://en.wikipedia.org/wiki/Cross_site_scripting">les failles cross-site script
  200. (XSS) </ulink> aide à éviter le vol de session. Selon <ulink url="http://secunia.com/">Secunia</ulink>, les
  201. problèmes XSS sont fréquents, quelque soit le langage utilisé pour créer l'application Web. Plutôt que de se
  202. considérer invulnérable, considérez votre application de manière à minimiser l'impact d'une éventuelle
  203. faille XSS. Avec XSS, l'attaquant n'a pas besoin d'accéder au trafic de la victime, sur le réseau. Si la
  204. victime possède déjà un cookie de session, javascript peut permettre à l'attaquant de voler celui-ci, et
  205. donc la session. Dans le cas de victimes sans cookie, l'attaquant peut utiliser XSS pour créer un cookie
  206. avec un session id connu, et l'envoyer à la victime, fixant ainsi la session. L'attaquant peut dès lors
  207. visualiser toute la session de la victime au fur et à mesure que celle-ci surfe, sans se rendre compte de
  208. rien. Cependant, l'attaquant ne peut modifier l'état de la session du coté PHP ( la fermer par exemple ),
  209. sauf si l'application possède d'autres vulnérabilités (CSRF), ou si le <code>save_path</code> est
  210. modifiable.</para>
  211. <para>En elle-même, la fonction <classname>Zend_Session::regenerateId()</classname> utilisée à la première utilisation
  212. de la session, ne protège pas contre la fixation. Ceci peut paraître contradictoire, mais un attaquant peut
  213. 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
  214. alors l'identifiant. Il n'aura plus qu'à fixer cet identifiant dans un javascript pour qu'une victime
  215. l'utilise, et la faille est à nouveau présente. Aussi, fixer la session par l'URL est extrêmement simple,
  216. mais n'est possible que lorsque <code>use_only_cookies = off</code>.</para>
  217. <para>Le vol de session ne peut se remarqué que si vous arrivez à faire la différence entre l'attaquant et
  218. la victime. Ce n'est pas chose simple, et les techniques utilisées ne sont jamais fiables à 100%. L'IP peut
  219. être utilisée, même si celle-ci n'est pas totalement fiable. Les en-têtes du navigateur Web, eux, le sont
  220. déjà plus (lorsque 2 requêtes successives avec le même identifiant de session arrivent au serveur, si l'une
  221. prétend être issue de FireFox et l'autre d'Opéra, alors très probablement qu'il s'agit de 2 personnes
  222. différentes, mais ayant le même identifiant de session. Typiquement : l'attaquant et sa victime.) Il est
  223. très difficile de différencier l'attaquant et la victime, c'est d'ailleurs impossible dans la suite de cas
  224. suivants : <itemizedlist mark="opencircle">
  225. <listitem>
  226. <para>l'attaquant initialise une session pour obtenir un identifiant valide.</para>
  227. </listitem>
  228. <listitem>
  229. <para>l'attaquant utilise une faille XSS pour envoyer un cookie de session à une victime,
  230. possédant son propre identifiant de session (fixation).</para>
  231. </listitem>
  232. <listitem>
  233. <para>l'attaquant et la victime utilisent le même navigateur, sont derrière le même
  234. proxy.</para>
  235. </listitem>
  236. </itemizedlist> Le code suivant permet d'empêcher l'attaquant de connaître l'identifiant de session de
  237. la victime (sauf s'il arrive à le fixer):</para>
  238. <example id="zend.session.global_session_management.session_identifiers.hijacking_and_fixation.example">
  239. <title>Vol et fixation, protections</title>
  240. <programlisting role="php"><![CDATA[
  241. $defaultNamespace = new Zend_Session_Namespace();
  242. if (!isset($defaultNamespace->initialized)) {
  243. Zend_Session::regenerateId();
  244. $defaultNamespace->initialized = true;
  245. }
  246. ]]></programlisting>
  247. </example>
  248. </sect3>
  249. </sect2>
  250. <sect2 id="zend.session.global_session_management.rememberme">
  251. <title><code>rememberMe(integer $seconds)</code></title>
  252. <para>Par défaut, la session se termine lorsque le client ferme son navigateur. Il peut cependant être
  253. nécessaire de faire en sorte que même après la fermeture, le cookie de session persiste un certain temps dans le
  254. navigateur. Utilisez <classname>Zend_Session::rememberMe()</classname> avant tout démarrage de la session, afin de
  255. spécifier à celle-ci qu'elle devra utiliser un cookie persistant du coté du client. Ce cookie persistera alors
  256. $seconds secondes. Si vous ne précisez pas de temps, <code>remember_me_seconds</code>, sera utilisé. Cette
  257. valeur se paramètre d'ailleurs au moyen de <classname>Zend_Session::setOptions()</classname>.</para>
  258. </sect2>
  259. <sect2 id="zend.session.global_session_management.forgetme">
  260. <title><code>forgetMe()</code></title>
  261. <para>Cette fonction est analogue à <code>rememberMe()</code> sauf qu'elle demande au cookie de session du
  262. navigateur client d'être détruit à la fermeture de celui-ci (et non éventuellement après X temps).</para>
  263. </sect2>
  264. <sect2 id="zend.session.global_session_management.sessionexists">
  265. <title><code>sessionExists()</code></title>
  266. <para>Utilisez cette méthode afin de savoir si une session existe pour le client (la requête) actuel. Ceci doit
  267. être utilisé avant le démarrage de la session.</para>
  268. </sect2>
  269. <sect2 id="zend.session.global_session_management.destroy">
  270. <title><code>destroy(bool $remove_cookie = true, bool $readonly = true)</code></title>
  271. <para><classname>Zend_Session::destroy()</classname> détruit la session et toutes les données la concernant. Cependant,
  272. aucune variable dans PHP n'est affectée, donc vos namespaces de session (instances de
  273. <classname>Zend_Session_Namespace</classname>) restent lisibles. Pour compléter la "déconnexion", laissez le premier
  274. paramètre à <code>true</code> (par défaut), demandant l'expiration du cookie de session du client.
  275. <code>$readonly</code> permet d'empêcher la future création de namespaces (new
  276. <classname>Zend_Session_Namespace</classname>) ou des opérations d'écriture via <classname>Zend_Session</classname>.</para>
  277. <para>Si vous voyez le message d'erreur "Cannot modify header information - headers already sent", alors tentez
  278. de ne pas utiliser <code>true</code> comme valeur du premier argument (ceci demande l'expiration du cookie de
  279. session, ou voyez <xref linkend="zend.session.global_session_management.headers_sent" />. Ainsi,
  280. <classname>Zend_Session::destroy(true)</classname> doit être appelé avant tout envoi d'en-tête HTTP par PHP, ou alors la
  281. bufferisation de sortie doit être activée (sans que celui-ci ne déborde).</para>
  282. <note>
  283. <title>Exception</title>
  284. <para>Par défaut, <code>$readonly</code> est activé et toute opération future d'écriture dans la session
  285. lèvera une exception.</para>
  286. </note>
  287. </sect2>
  288. <sect2 id="zend.session.global_session_management.stop">
  289. <title><code>stop()</code></title>
  290. <para>Cette méthode ne fait rien d'autre que de verrouiller la session en écriture. Tout appel futur d'écriture
  291. via des instances de <classname>Zend_Session_Namespace</classname> ou <classname>Zend_Session</classname> lèvera une
  292. exception.</para>
  293. </sect2>
  294. <sect2 id="zend.session.global_session_management.writeclose">
  295. <title><code>writeClose($readonly = true)</code></title>
  296. <para>Ferme la session coté serveur, soit enregistre les variables de session dans le support, et détache
  297. <code>$_SESSION</code> de son support de stockage. Le paramètre optionnel <code>$readonly</code> empêche alors
  298. toute future écriture via <classname>Zend_Session</classname> ou <classname>Zend_Session_Namespace</classname>. Ces écritures
  299. lèveront une exception.</para>
  300. <note>
  301. <title>Exception</title>
  302. <para>Par défaut, <code>$readonly</code> est activé, et donc tout appel d'écriture futur dans la session
  303. générera une exception. Certaines applications peuvent nécessiter de conserver un accès en écriture dans
  304. <code>$_SESSION</code>, même si ce tableau a été déconnecté de son support de stockage avec
  305. <code>session_write_close()</code>. Ainsi, Zend Framework propose cette option en passant à
  306. <code>false</code> la valeur de <code>$readonly</code>, mais ce n'est pas une pratique conseillée.</para>
  307. </note>
  308. </sect2>
  309. <sect2 id="zend.session.global_session_management.expiresessioncookie">
  310. <title><code>expireSessionCookie()</code></title>
  311. <para>Cette méthode envoie un cookie d'identifiant de session périmé au client. Quelque fois cette technique est
  312. utilisée pour déconnecter le client de sa session.</para>
  313. </sect2>
  314. <sect2 id="zend.session.global_session_management.savehandler">
  315. <title><code>setSaveHandler(Zend_Session_SaveHandler_Interface $interface)</code></title>
  316. <para>Cette méthode propose une correspondance orientée objet de <ulink
  317. url="http://php.net/session_set_save_handler"><code>session_set_save_handler()</code></ulink>.</para>
  318. </sect2>
  319. <sect2 id="zend.session.global_session_management.namespaceisset">
  320. <title><code>namespaceIsset($namespace)</code></title>
  321. <para>Cette méthode permet de déterminer si un namespace existe dans la session.</para>
  322. <note>
  323. <title>Exception</title>
  324. <para>Une exception sera levée si la session n'est pas lisible (n'a pas été démarrée).</para>
  325. </note>
  326. </sect2>
  327. <sect2 id="zend.session.global_session_management.namespaceunset">
  328. <title><code>namespaceUnset($namespace)</code></title>
  329. <para>Utilisez <classname>Zend_Session::namespaceUnset($namespace)</classname> pour détruire un namespace entier de la
  330. session. Comme pour les tableaux PHP, si le tableau est détruit, les objets à l'intérieur ne le sont pas s'il
  331. reste des références vers eux dans d'autres tableaux ou objets toujours accessibles. Ainsi
  332. <code>namespaceUnset()</code> ne détruit pas "en profondeur" la variable de session associée au namespace. Voyez
  333. <ulink url="http://php.net/references">les références en PHP</ulink> pour plus d'infos.</para>
  334. <note>
  335. <title>Exception</title>
  336. <para>Une exception sera envoyée si le namespace n'est pas écrivable (après un appel à
  337. <code>destroy()</code>).</para>
  338. </note>
  339. </sect2>
  340. <sect2 id="zend.session.global_session_management.namespaceget">
  341. <title><code>namespaceGet($namespace)</code></title>
  342. <para>Déprécié: Utilisez <code>getIterator()</code> dans <classname>Zend_Session_Namespace</classname>. Cette méthode
  343. retourne un tableau du contenu du namespace $namespace. Si vous avez une raison de conserver cette méthode,
  344. faites nous part de vos remarques à <ulink
  345. url="mailto:fw-auth@lists.zend.com">fw-auth@lists.zend.com</ulink>.</para>
  346. <note>
  347. <title>Exception</title>
  348. <para>Une exception sera levée si la session n'est pas lisible (n'a pas été démarrée).</para>
  349. </note>
  350. </sect2>
  351. <sect2 id="zend.session.global_session_management.getiterator">
  352. <title><code>getIterator()</code></title>
  353. <para><code>getIterator()</code> retourne un <code>ArrayObject</code> contenant tous les noms des namespaces de
  354. session.</para>
  355. <note>
  356. <title>Exception</title>
  357. <para>Une exception sera levée si la session n'est pas lisible (n'a pas été démarrée).</para>
  358. </note>
  359. </sect2>
  360. </sect1>