mirror of
https://github.com/macintoshplus/doc-fr.git
synced 2026-03-27 02:12:19 +01:00
git-svn-id: https://svn.php.net/repository/phpdoc/fr/trunk@297032 c90b9560-bf6c-de11-be94-00142212c4b1
278 lines
10 KiB
XML
278 lines
10 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: 96c9d88bad9a7d7d44bfb7f26c226df7ee9ddf26 Maintainer: dams Status: ready -->
|
|
<!-- Reviewed: yes -->
|
|
|
|
<appendix xml:id="session.examples" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
&reftitle.examples;
|
|
<section xml:id="session.examples.basic">
|
|
<note>
|
|
<para>
|
|
Depuis PHP 4.1.0, <varname>$_SESSION</varname> est disponible comme
|
|
variable globale, au même titre que <varname>$_POST</varname>,
|
|
<varname>$_GET</varname>, <varname>$_REQUEST</varname>, etc.
|
|
Contrairement à <varname>$HTTP_SESSION_VARS</varname>,
|
|
<varname>$_SESSION</varname> est toujours globale. Par conséquent, vous
|
|
n'avez pas besoin d'utiliser le mot réservé
|
|
<link linkend="language.variables.scope"><command>global</command></link>
|
|
avec <varname>$_SESSION</varname>. Notez que cette documentation
|
|
a été modifiée pour utiliser <varname>$_SESSION</varname>.
|
|
Vous pouvez toujours le remplacer par
|
|
<varname>$HTTP_SESSION_VARS</varname> si vous préférez l'ancienne version.
|
|
Notez également que vous devez démarrer votre session en utilisant la fonction
|
|
<function>session_start</function> avant d'utiliser
|
|
la variable super-globale <varname>$_SESSION</varname>.
|
|
</para>
|
|
<para>
|
|
Les clés du tableau <varname>$_SESSION</varname> sont sujettes
|
|
aux mêmes limitations que les variables PHP habituelles, c'est-à-dire
|
|
qu'elles ne peuvent pas commencer par un nombre, mais commencer par
|
|
une lettre ou un souligné '_'. Pour plus de détails, reportez-vous à
|
|
la section sur les <link linkend="language.variables">variables</link>.
|
|
</para>
|
|
</note>
|
|
|
|
<para>
|
|
Si <link linkend="ini.register-globals">register_globals</link>
|
|
est désactivé, seuls les éléments du tableau global
|
|
<varname>$_SESSION</varname> contiendront les variables
|
|
enregistrées dans la session. Les variables de sessions relues seront
|
|
uniquement disponibles dans <varname>$_SESSION</varname>.
|
|
</para>
|
|
<para>
|
|
L'utilisation de <varname>$_SESSION</varname> (ou
|
|
<varname>$HTTP_SESSION_VARS</varname> avec PHP 4.0.6 et plus ancien) est
|
|
recommandé pour une meilleure sécurité et un code plus facilement
|
|
entretenu. Avec <varname>$_SESSION</varname>, il n'y a pas besoin
|
|
d'utiliser les fonctions <function>session_register</function>,
|
|
<function>session_unregister</function> et
|
|
<function>session_is_registered</function>. Les variables de sessions
|
|
sont accessibles comme toute autre variable.
|
|
<example>
|
|
<title>
|
|
Enregistrer une variable avec <varname>$_SESSION</varname>.
|
|
</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
session_start();
|
|
// Utilisez $HTTP_SESSION_VARS avec PHP 4.0.6 ou plus ancien
|
|
if (!isset($_SESSION['count'])) {
|
|
$_SESSION['count'] = 0;
|
|
} else {
|
|
$_SESSION['count']++;
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
<example>
|
|
<title>
|
|
Retirer une variable de session avec <varname>$_SESSION</varname> et <link
|
|
linkend="ini.register-globals"><option>register_globals</option></link> inactif.
|
|
</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
session_start();
|
|
// Utilisez $HTTP_SESSION_VARS avec PHP 4.0.6 ou plus ancien
|
|
unset($_SESSION['count']);
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<caution>
|
|
<para>
|
|
N'utilisez PAS la fonction <function>unset</function>
|
|
avec <varname>$_SESSION</varname> sous la forme
|
|
<literal>unset($_SESSION)</literal> sinon, cela rendra impossible
|
|
l'enregistrement de données dans la session en utilisant la super-globale
|
|
<varname>$_SESSION</varname>.
|
|
</para>
|
|
</caution>
|
|
</para>
|
|
<warning>
|
|
<para>
|
|
Vous ne pouvez pas utiliser les références sur des variables de session
|
|
car il n'y a aucune manière faisable de restaurer une référence vers une
|
|
autre variable.
|
|
</para>
|
|
</warning>
|
|
<para>
|
|
Si <link linkend="ini.register-globals">register_globals</link>
|
|
est activé, alors toutes les variables globales peuvent être
|
|
enregistrées comme variables de session, et toutes les variables de
|
|
sessions seront reconstituées comme variables globales. Comme PHP doit
|
|
savoir quels variables globales sont enregistrées comme variables
|
|
de sessions, l'utilisateur doit enregistrer les variables avec
|
|
<function>session_register</function> tandis que
|
|
<varname>$HTTP_SESSION_VARS</varname> et <varname>$_SESSION</varname>
|
|
ne nécessitent pas <function>session_register</function>.
|
|
<caution>
|
|
<para>
|
|
Avant PHP 4.3.0, si vous utilisez <varname>$_SESSION</varname> et que
|
|
vous avez désactivé <link
|
|
linkend="ini.register-globals"><option>register_globals</option></link>,
|
|
n'utilisez pas <function>session_register</function>,
|
|
<function>session_is_registered</function> ou
|
|
<function>session_unregister</function>.
|
|
Désactiver
|
|
<link linkend="ini.register-globals">register_globals</link>
|
|
est recommandé pour des raisons de sécurité et de performances.
|
|
</para>
|
|
</caution>
|
|
</para>
|
|
<para>
|
|
Si <link
|
|
linkend="ini.register-globals">register_globals</link>
|
|
est activé, alors les variables globales et les entrées dans le tableau
|
|
<varname>$_SESSION</varname> seront des références sur la même valeur pour
|
|
les valeurs qui auront été enregistrées avant le démarrage de la session
|
|
(donc, dans les page précédentes). Cependant, si la variable a été enregistrée
|
|
avec <varname>$_SESSION</varname>, alors, la variable globale est disponible
|
|
jusqu'à la prochaine requête.
|
|
</para>
|
|
<para>
|
|
De plus, si vous enregistrez une nouvelle variable avec la fonction
|
|
<function>session_register</function>, l'entrée dans l'environnement
|
|
global et <varname>$_SESSION</varname> ne fera pas de référence vers la
|
|
même valeur jusqu'à la prochaine utilisation de
|
|
<function>session_start</function> (ceci s'applique à PHP 4.2.3 et
|
|
avant seulement). C'est à dire qu'une modification dans les variables
|
|
globales ne sera pas répercutée dans les entrées de
|
|
<varname>$_SESSION</varname>. Il est peu probable que cela ait un impact en
|
|
pratique et, de plus, cela a été corrigé en PHP 4.3.0.
|
|
</para>
|
|
</section>
|
|
|
|
<section xml:id="session.idpassing">
|
|
<title>Passer l'identifiant de session (session ID)</title>
|
|
<para>
|
|
Il y a deux méthodes de propagation de l'identifiant de session :
|
|
<itemizedlist>
|
|
<listitem>
|
|
<simpara>
|
|
Cookies
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Par URL
|
|
</simpara>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
<para>
|
|
Le module de session supporte les deux méthodes. Les cookies sont
|
|
optimaux, mais comme ils ne sont pas sûrs (tous les internautes
|
|
ne les acceptent pas), ils ne sont pas fiables. La seconde
|
|
méthode place l'identifiant de session directement dans les URL.
|
|
</para>
|
|
<para>
|
|
PHP est capable de faire cela de manière transparente, lorsqu'il est
|
|
compilé avec l'option <link linkend="ini.session.use-trans-sid">
|
|
--enable-trans-sid</link>. Si vous activez
|
|
cette option et que l'option d'exécution <literal>session.use_trans_sid</literal>
|
|
est activée, les URLs relatives seront modifiées pour contenir l'identifiant
|
|
de session automatiquement.
|
|
<note>
|
|
<para>
|
|
L'option <link linkend="ini.arg-separator.output">arg_separator.output</link>
|
|
de &php.ini; vous permet de personnaliser le séparateur d'arguments.
|
|
Pour être complètement en accord avec les spécifications XHTML, spécifiez
|
|
&amp; ici.
|
|
</para>
|
|
</note>
|
|
</para>
|
|
<para>
|
|
Alternativement, vous pouvez utiliser la constante <constant>SID</constant>
|
|
qui est définie si la session a commencé. Si le client n'envoie pas un cookie de session
|
|
approprié, il aura la forme <literal>session_name=session_id</literal>.
|
|
Sinon, il vaudra une chaîne vide. Ainsi, vous pouvez dans tous les cas
|
|
l'inclure dans l'URL.
|
|
</para>
|
|
<para>
|
|
L'exemple suivant vous montre comment enregistrer une variable et comment
|
|
réaliser un lien correct avec une autre page, avec
|
|
<constant>SID</constant>.
|
|
<example>
|
|
<title>Compter le nombre de passages d'un utilisateur sur une page</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
|
|
session_start();
|
|
|
|
if (empty($_SESSION['count'])) {
|
|
$_SESSION['count'] = 1;
|
|
} else {
|
|
$_SESSION['count']++;
|
|
}
|
|
?>
|
|
|
|
<p>
|
|
Bonjour visiteur, vous avez vu cette page <?php echo $_SESSION['count']; ?> fois.
|
|
</p>
|
|
|
|
<p>
|
|
Pour continuer, <a href="nextpage.php?<?php echo htmlspecialchars(SID); ?>">cliquez ici</a>.
|
|
</p>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
La fonction <function>htmlspecialchars</function> est utilisée lors de l'affichage
|
|
du <constant>SID</constant> dans le but de contrer les attaques XSS.
|
|
</para>
|
|
<para>
|
|
L'affichage du <constant>SID</constant>, comme montré dans l'exemple
|
|
ci-dessus, n'est pas nécessaire si <link
|
|
linkend="ini.session.use-trans-sid">
|
|
--enable-trans-sid</link> a été utilisé pour compiler
|
|
PHP.
|
|
</para>
|
|
<note>
|
|
<para>
|
|
Les URL non-relatives sont considérées comme externes au site, et ne
|
|
recevront pas le <constant>SID</constant>, car c'est une fuite
|
|
d'informations vers un autre site (envoi d'informations importantes).
|
|
</para>
|
|
</note>
|
|
</section>
|
|
|
|
<section xml:id="session.customhandler">
|
|
<title>Gestion personnalisée des sessions</title>
|
|
<para>
|
|
Pour implémenter un stockage en base de données, ou toute autre méthode,
|
|
vous aurez besoin de la fonction
|
|
<function>session_set_save_handler</function> pour
|
|
paramétrer vos propres fonctions de stockage.
|
|
</para>
|
|
</section>
|
|
</appendix>
|
|
|
|
<!-- 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
|
|
-->
|
|
|