-
Notifications
You must be signed in to change notification settings - Fork 157
/
Copy pathsession-set-save-handler.xml
409 lines (396 loc) · 16.5 KB
/
session-set-save-handler.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 184f3f7bd45643cb80f828d0bb001991ec3a5fad Maintainer: yannick Status: ready -->
<!-- Reviewed: no -->
<refentry xmlns="http://docbook.org/ns/docbook" xml:id="function.session-set-save-handler" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>session_set_save_handler</refname>
<refpurpose>Configure les fonctions de stockage de sessions</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>bool</type><methodname>session_set_save_handler</methodname>
<methodparam><type>callable</type><parameter>open</parameter></methodparam>
<methodparam><type>callable</type><parameter>close</parameter></methodparam>
<methodparam><type>callable</type><parameter>read</parameter></methodparam>
<methodparam><type>callable</type><parameter>write</parameter></methodparam>
<methodparam><type>callable</type><parameter>destroy</parameter></methodparam>
<methodparam><type>callable</type><parameter>gc</parameter></methodparam>
<methodparam choice="opt"><type>callable</type><parameter>create_sid</parameter></methodparam>
<methodparam choice="opt"><type>callable</type><parameter>validate_sid</parameter></methodparam>
<methodparam choice="opt"><type>callable</type><parameter>update_timestamp</parameter></methodparam>
</methodsynopsis>
<para>
Il est possible d'enregistrer le prototype suivant :
</para>
<methodsynopsis>
<type>bool</type><methodname>session_set_save_handler</methodname>
<methodparam><type>object</type><parameter>sessionhandler</parameter></methodparam>
<methodparam choice="opt"><type>bool</type><parameter>register_shutdown</parameter><initializer>&true;</initializer></methodparam>
</methodsynopsis>
<para>
<function>session_set_save_handler</function> configure les fonctions
de stockage de sessions, et permet de choisir des fonctions utilisateurs
pour sauver et relire toutes les sessions. Cette fonction est
très pratique lorsqu'il faut sauver les données de sessions
en utilisant une autre technique que le système par fichier fourni
par défaut, par exemple le stockage en base de données.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
Cette fonction a deux prototypes.
<variablelist>
<varlistentry>
<term><parameter>sessionhandler</parameter></term>
<listitem>
<para>
Une instance d'une classe implémentant une ou plusieurs des interfaces suivantes:
<interfacename>SessionHandlerInterface</interfacename>, et optionellement
<interfacename>SessionIdInterface</interfacename>, et/ou
<interfacename>SessionUpdateTimestampHandlerInterface</interfacename>,
comme la classe <classname>SessionHandler</classname>,
pour l'enregistrement comme gestionnaire de session.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>register_shutdown</parameter></term>
<listitem>
<para>
Enregistre la fonction <function>session_write_close</function>
comme fonction <function>register_shutdown_function</function>.
</para>
</listitem>
</varlistentry>
</variablelist>
ou
<variablelist>
<varlistentry>
<term><parameter>open</parameter></term>
<listitem>
<para>
Une fonction de rappel avec la signature suivante :
<methodsynopsis>
<type>bool</type><methodname><replaceable>open</replaceable></methodname>
<methodparam><type>string</type><parameter>savePath</parameter></methodparam>
<methodparam><type>string</type><parameter>sessionName</parameter></methodparam>
</methodsynopsis>
</para>
<para>
La fonction de rappel <literal>open</literal> fonctionne comme un constructeur
dans une classe, et est exécutée lorsque la session s'ouvre.
C'est la première fonction de rappel exécutée lorsque la session
démarre automatiquement ou manuellement avec la fonction
<function>session_start</function>. La valeur retournée
est &true; en cas de succès ou &false; si une erreur survient.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>close</parameter></term>
<listitem>
<para>
Une fonction de rappel avec la signature suivante :
<methodsynopsis>
<type>bool</type><methodname><replaceable>close</replaceable></methodname>
<void/>
</methodsynopsis>
</para>
<para>
La fonction de rappel <literal>close</literal> fonctionne comme un
destructeur dans une classe, et est exécutée une fois que la fonction
de rappel write de la session a terminé de s'exécuter. Elle est également
appelé lorsque la fonction <function>session_write_close</function> est appelée.
La valeur retournée est &true; en cas de succès, ou &false; si une erreur
survient.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>read</parameter></term>
<listitem>
<para>
Une fonction de rappel avec la signature suivante :
<methodsynopsis>
<type>string</type><methodname><replaceable>read</replaceable></methodname>
<methodparam><type>string</type><parameter>sessionId</parameter></methodparam>
</methodsynopsis>
</para>
<para>
La fonction de rappel <parameter>read</parameter> doit toujours retournée
une chaîne sérialisée contenant les données de session encodées
ou une chaîne vide s'il n'y a aucune donnée à lire.
</para>
<para>
Cette fonction de rappel est appelée en interne par PHP lorsque la session
commence ou lorsque la fonction <function>session_start</function> est appelée.
Avant que cette fonction de rappel ne soit invoquée, PHP invoquera
la fonction de rappel <parameter>open</parameter>.
</para>
<para>
La valeur retournée par cette fonction de rappel doit être exactement du même
format de sérialisation que celui passé pour le stockage à la fonction
de rappel <parameter>write</parameter>. La valeur retournée sera désérialisée
automatiquement par PHP et utilisée pour peupler la variable superglobale
<varname>$_SESSION</varname>. Malgré le fait que les données ressemblent fortement
aux données issuées de la fonction <function>serialize</function>, notez que c'est bien
un format différent, qui est spécifié via l'option de configuration
<link linkend="ini.session.serialize-handler">session.serialize_handler</link>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>write</parameter></term>
<listitem>
<para>
Une fonction de rappel avec la signature suivante :
<methodsynopsis>
<type>bool</type><methodname><replaceable>write</replaceable></methodname>
<methodparam><type>string</type><parameter>sessionId</parameter></methodparam>
<methodparam><type>string</type><parameter>data</parameter></methodparam>
</methodsynopsis>
</para>
<para>
La fonction de rappel <parameter>write</parameter> est appelée lorsque la session
doit être sauvegardée et fermée. Cette fonction de rappel reçoit l'identifiant de
la session courante ainsi qu'une version sérialisée du contenu de la variable
superglobale <varname>$_SESSION</varname>. La méthode de sérialisation utilisée en
interne par PHP est spécifiée via l'option de configuration
<link linkend="ini.session.serialize-handler">session.serialize_handler</link>.
</para>
<para>
Les données de session sérialisées passées à cette fonction de rappel doivent être
stockées en utilisant l'identifiant de session fournie. Lors de la récupération
de ces données, la fonction de rappel <parameter>read</parameter> doit retourner
la valeur exacte, originalement passée à la fonction de rappel <parameter>write</parameter>.
</para>
<para>
Cette fonction de rappel est invoquée lorsque PHP s'arrête ou explicitement
lorsque la fonction <function>session_write_close</function> est appelée.
Notez qu'après l'exécution de cette fonction, PHP exécutera en interne la
fonction de rappel <parameter>close</parameter>.
<note>
<para>
Le gestionnaire d'écriture n'est pas exécuté tant que le flux de sortie
n'aura pas été fermé. Aussi, la sortie des requêtes de débogage
du gestionnaire "write" ne sera jamais affichée dans le navigateur.
Si la sortie de débogage est nécessaire, il est suggéré qu'elle soit
plutôt orientée dans un fichier.
</para>
</note>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>destroy</parameter></term>
<listitem>
<para>
Une fonction de rappel avec la signature suivante :
<methodsynopsis>
<type>bool</type><methodname><replaceable>destroy</replaceable></methodname>
<methodparam><type>string</type><parameter>sessionId</parameter></methodparam>
</methodsynopsis>
</para>
<para>
Cette fonction de rappel est exécutée lorsqu'une session est détruite
avec la fonction <function>session_destroy</function> ou avec
<function>session_regenerate_id</function> avec le paramètre de destruction définie
à &true;. La valeur retournée doit être &true; en cas de succès, ou &false; si une
erreur survient.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>gc</parameter></term>
<listitem>
<para>
Une fonction de rappel avec la signature suivante :
<methodsynopsis>
<type>bool</type><methodname><replaceable>gc</replaceable></methodname>
<methodparam><type>int</type><parameter>lifetime</parameter></methodparam>
</methodsynopsis>
</para>
<para>
La fonction de rappel de ramasse miettes (garbage collector) est invoquée en interne par PHP
périodiquement afin de purger les anciennes données de session. La fréquence
est contrôlé par les options de configuration
<link linkend="ini.session.gc-probability">session.gc_probability</link> et
<link linkend="ini.session.gc-divisor">session.gc_divisor</link>.
La valeur de la durée de vie passée à cette fonction de rappel peut être
définie via l'option de configuration <link linkend="ini.session.gc-maxlifetime">session.gc_maxlifetime</link>.
La valeur retournée doit être &true; en cas de succès, ou &false; si une erreur survient.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>create_sid</parameter></term>
<listitem>
<para>
Une fonction de rappel avec la signature suivante :
<methodsynopsis>
<type>string</type><methodname><replaceable>create_sid</replaceable></methodname>
<void/>
</methodsynopsis>
</para>
<para>
Cette fonction de rappel est exécutée lorsqu'un nouvel ID de session
est nécessaire. Aucun paramètre n'est fourni, et la valeur retournée doit
être une chaîne de caractères qui est un ID de session valide pour votre
gestionnaire.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>validate_sid</parameter></term>
<listitem>
<para>
Une fonction de rappel avec la signature suivante :
<methodsynopsis>
<type>bool</type><methodname><replaceable>validate_sid</replaceable></methodname>
<methodparam><type>string</type><parameter>key</parameter></methodparam>
</methodsynopsis>
</para>
<para>
Cette fonction de rappel est exécuté quand une session va démarrer, un ID
de session est fournie et que
<link linkend="ini.session.use-strict-mode">session.use_strict_mode</link>
est activé.
<parameter>key</parameter> est l'ID de session à valider.
Un ID de session est valide, si une session avec cet ID existe déjà.
La valeur de retour devrait être &true; en cas de succès, &false; en cas
d'échec.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>update_timestamp</parameter></term>
<listitem>
<para>
Une fonction de rappel avec la signature suivante :
<methodsynopsis>
<type>bool</type><methodname><replaceable>update_timestamp</replaceable></methodname>
<methodparam><type>string</type><parameter>key</parameter></methodparam>
<methodparam><type>string</type><parameter>val</parameter></methodparam>
</methodsynopsis>
</para>
<para>
Cette fonction de rappel est exécuté quand une session est mise à jour.
<parameter>key</parameter> est l'ID de session, <parameter>val</parameter>
sont les données de session.
La valeur de retour devrait être &true; en cas de succès, &false; en cas
d'échec.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
&return.success;
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>
Gestionnaire de session personnalisé : voir le code complet
dans la documentation sur l'interface <classname>SessionHandlerInterface</classname>.
</title>
<para>
Nous montrons juste l'invocation ici, l'exemple complet peut être vu dans
la documentation de l'interface
<classname>SessionHandlerInterface</classname>.
</para>
<para>
Notez que nous utilisons ici le prototype orienté objet avec
<function>session_set_save_handler</function> et enregistrons la fonction
d'arrêt en utilisant le drapeau dans le paramètre de la fonction. C'est généralement
préférable lors de l'enregistrement d'objets comme gestionnaires de sauvegarde de session.
</para>
<programlisting role="php">
<![CDATA[
<?php
class MySessionHandler implements SessionHandlerInterface
{
// implémentation de l'interface ici
}
$handler = new MySessionHandler();
session_set_save_handler($handler, true);
session_start();
// processus pour définir et récupérer les valeurs par leurs clés depuis $_SESSION
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<warning>
<para>
Les gestionnaires d'écriture <parameter>write</parameter> et de fermeture
<parameter>close</parameter> sont appelés après la destruction des objets,
et donc, ne peuvent pas utiliser les objets ou lancer des exceptions.
Les exceptions ne peuvent donc pas être attrapées ni affichées,
et l'exécution ne fera que s'arrêter de façon innatendue.
</para>
<para>
Il est possible d'appeler <function>session_write_close</function> depuis
le destructeur pour résoudre ce problème mais la façon la plus élégante
est d'enregistrer la fonction d'arrêt tel que décrit ci-dessus.
</para>
</warning>
<warning>
<para>
Le dossier de travail courant change suivant les SAPIs si la session
est fermée à la fin du script. Il est possible de fermer la session
plus tard, grâce à la fonction <function>session_write_close</function>.
</para>
</warning>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member>
La directive de configuration <link linkend="ini.session.save-handler">session.save_handler</link>
</member>
<member>
La directive de configuration
<link linkend="ini.session.serialize-handler">session.serialize_handler</link>.
</member>
<member><function>register_shutdown_function</function></member>
<member><function>session_register_shutdown</function></member>
<member>
Se reporter à <link xlink:href="&url.session-save-handler;">save_handler.inc</link>
pour une mise en œuvre procédurales complète
</member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->