<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/session.examples.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'fr',
  ),
  'this' => 
  array (
    0 => 'session.examples.basic.php',
    1 => 'Utilisation simple',
    2 => 'Utilisation simple',
  ),
  'up' => 
  array (
    0 => 'session.examples.php',
    1 => 'Exemples',
  ),
  'prev' => 
  array (
    0 => 'session.examples.php',
    1 => 'Exemples',
  ),
  'next' => 
  array (
    0 => 'session.idpassing.php',
    1 => 'Passer l\'identifiant de session (session ID)',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'reference/session/examples.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="session.examples.basic" class="section">
  <h2 class="title">Utilisation simple</h2>
   <p class="para">
    Les sessions sont un moyen simple de stocker des données individuelles pour chaque
    utilisateur en utilisant un identifiant de session unique. Elles peuvent être utilisées
    pour faire persister des informations entre plusieurs pages. Les identifiants de session
    sont normalement envoyés au navigateur via des cookies de session, et l&#039;identifiant
    est utilisé pour récupérer les données existantes de la session. L&#039;absence d&#039;un identifiant
    ou d&#039;un cookie de session indique à PHP de créer une nouvelle session, et génère ainsi
    un nouvel identifiant de session.
   </p>
   <p class="para">
    Les sessions suivent une cinématique simple. Lorsqu&#039;une session est démarrée, PHP va
    soit récupérer une session existante en utilisant l&#039;identifiant de session passé (habituellement
    depuis un cookie de session) ou si aucun identifiant de session n&#039;est passé, il va créer une
    nouvelle session. PHP va ainsi peupler la variable superglobale <var class="varname"><a href="reserved.variables.session.php" class="classname">$_SESSION</a></var>
    avec toutes les données de session une fois la session démarrée. Lorsque PHP s&#039;arrête,
    il va prendre automatiquement le contenu de la variable superglobale <var class="varname"><a href="reserved.variables.session.php" class="classname">$_SESSION</a></var>,
    le sérialiser, et l&#039;envoyer pour stockage au gestionnaire de sauvegarde de session.
   </p>
   <p class="para">
    Par défaut, PHP utilise en interne le gestionnaire de sauvegarde <code class="parameter">files</code>
    qui est défini via la directive <a href="session.configuration.php#ini.session.save-handler" class="link">session.save_handler</a>.
    Les données de session seront sauvegardées sur le serveur à l&#039;endroit spécifié par
    la directive de configuration <a href="session.configuration.php#ini.session.save-path" class="link">session.save_path</a>.
   </p>
   <p class="para">
    Les sessions peuvent être démarrées manuellement en utilisant la fonction
    <span class="function"><a href="function.session-start.php" class="function">session_start()</a></span>. Si la directive de configuration
    <a href="session.configuration.php#ini.session.auto-start" class="link">session.auto_start</a> est définie à
    <code class="parameter">1</code>, une session démarrera automatiquement lors du début
    de la demande.
   </p>
   <p class="para">
    Les sessions s&#039;arrêtent automatiquement lorsque PHP a terminé d&#039;exécuter un script, mais
    peuvent être stoppées manuellement en utilisant la fonction
    <span class="function"><a href="function.session-write-close.php" class="function">session_write_close()</a></span>.
   </p>
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>Exemple #1 
     Enregistrer une variable avec <var class="varname"><a href="reserved.variables.session.php" class="classname">$_SESSION</a></var>.
    </strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />session_start</span><span style="color: #007700">();<br />if (!isset(</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'count'</span><span style="color: #007700">])) {<br />  </span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'count'</span><span style="color: #007700">] = </span><span style="color: #0000BB">0</span><span style="color: #007700">;<br />} else {<br />  </span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'count'</span><span style="color: #007700">]++;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   <div class="example" id="example-2">
    <p><strong>Exemple #2 
     Retirer une variable de session avec la superglobale <var class="varname"><a href="reserved.variables.session.php" class="classname">$_SESSION</a></var>.
    </strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />session_start</span><span style="color: #007700">();<br />unset(</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'count'</span><span style="color: #007700">]);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
  <p class="para">
   <div class="caution"><strong class="caution">Attention</strong>
    <p class="para">
     N&#039;utiliser PAS la fonction <span class="function"><a href="function.unset.php" class="function">unset()</a></span>
     avec <var class="varname"><a href="reserved.variables.session.php" class="classname">$_SESSION</a></var> sous la forme
     <code class="literal">unset($_SESSION)</code> sinon, cela rendra impossible
     l&#039;enregistrement de données dans la session en utilisant la super-globale
     <var class="varname"><a href="reserved.variables.session.php" class="classname">$_SESSION</a></var>.
    </p>
   </div>
  </p>
  <div class="warning"><strong class="warning">Avertissement</strong>
   <p class="para">
    Il n&#039;est pas possible d&#039;utiliser les références sur des variables de session
    car il n&#039;y a aucune manière faisable de restaurer une référence vers une
    autre variable.
   </p>
  </div>
  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <p class="para">
    Les sessions basées sur un fichier (par défaut en PHP) verrouillent
    le fichier de session lorsqu&#039;une session est ouverte via la fonction
    <span class="function"><a href="function.session-start.php" class="function">session_start()</a></span> ou implicitement via la directive
    de configuration <a href="session.configuration.php#ini.session.auto-start" class="link">session.auto_start</a>.
    Une fois verrouillée, aucun autre script ne peut accéder au même fichier
    de session tant que la session n&#039;a pas été fermée par le script
    l&#039;ayant ouverte, ou tant que la fonction
    <span class="function"><a href="function.session-write-close.php" class="function">session_write_close()</a></span> n&#039;a pas été appelée.
   </p>
   <p class="para">
    Ceci peut être gênant pour les sites web utilisant AJAX et produisant
    plusieurs requêtes concurrentes. La façon la plus simple pour contourner
    ce problème est d&#039;appeler la fonction <span class="function"><a href="function.session-write-close.php" class="function">session_write_close()</a></span>
    dès lors que les modifications dans la session ont été effectuées,
    de préférence en début de script. Il est possible d&#039;aussi utiliser
    un autre gestionnaire de session qui supporte la concurrence.
   </p>
  </p></blockquote>
 </div><?php manual_footer($setup); ?>