<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/ref.session.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'fr',
  ),
  'this' => 
  array (
    0 => 'function.session-regenerate-id.php',
    1 => 'session_regenerate_id',
    2 => 'Remplace l\'identifiant de session courant par un nouveau',
  ),
  'up' => 
  array (
    0 => 'ref.session.php',
    1 => 'Fonctions Session',
  ),
  'prev' => 
  array (
    0 => 'function.session-name.php',
    1 => 'session_name',
  ),
  'next' => 
  array (
    0 => 'function.session-register-shutdown.php',
    1 => 'session_register_shutdown',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'reference/session/functions/session-regenerate-id.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.session-regenerate-id" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">session_regenerate_id</h1>
  <p class="verinfo">(PHP 4 &gt;= 4.3.2, PHP 5, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">session_regenerate_id</span> &mdash; <span class="dc-title">
   Remplace l&#039;identifiant de session courant par un nouveau
  </span></p>

 </div>

 <div class="refsect1 description" id="refsect1-function.session-regenerate-id-description">
  <h3 class="title">Description</h3>
  <div class="methodsynopsis dc-description">
   <span class="methodname"><strong>session_regenerate_id</strong></span>(<span class="methodparam"><span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> <code class="parameter">$delete_old_session</code><span class="initializer"> = <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong></span></span>): <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></div>

  <p class="para rdfs-comment">
   <span class="function"><strong>session_regenerate_id()</strong></span> va remplacer l&#039;identifiant
   de session courant par un nouveau, généré automatiquement, tout
   en conservant les valeurs de session.
  </p>
  <p class="para">
   Lorsque l&#039;option <a href="session.configuration.php#ini.session.use-trans-sid" class="link">session.use_trans_sid</a>
   est active, la sortie pour affichage doit commencer après l&#039;appel à la fonction
   <span class="function"><strong>session_regenerate_id()</strong></span>. Sinon, l&#039;ancien ID de session sera utilisé.
  </p>
  <div class="warning"><strong class="warning">Avertissement</strong>
   <p class="para">
    Actuellement, session_regenerate_id ne gère pas bien un réseau instable.
    Par ex. réseau mobile et WiFi. Par conséquent, il est possible de rencontrer une 
    perte de session en appelant session_regenerate_id.
   </p>
   <p class="para">
    Il ne faut pas détruire les anciennes données de session immédiatement, 
    mais il faut utiliser l&#039;horodatage de destruction et contrôler l&#039;accès à
    l&#039;ancien ID de session. Sinon, l&#039;accès simultané à la page peut entraîner un 
    état incohérent, ou l&#039;on a peut-être perdu la session, ou il peut 
    provoquer un accès concurrent côté client (navigateur) et peut créer de 
    nombreux ID de session inutilement. La suppression immédiate de données de 
    session désactive également la détection et la prévention d&#039;attaque de 
    détournement de session.
   </p>
  </div>
 </div>


 <div class="refsect1 parameters" id="refsect1-function.session-regenerate-id-parameters">
  <h3 class="title">Liste de paramètres</h3>
  <p class="para">
   <dl>
    
     <dt><code class="parameter">delete_old_session</code></dt>
      <dd>
       <p class="para">
        Si l&#039;on doit effacer l&#039;ancien fichier de session associé ou pas.
        Il ne faut pas supprimer l&#039;ancienne session en cas de besoin 
        d&#039;éviter les accès concurrents causés par la suppression ou de détecter/éviter 
        les attaques de détournement de session.
       </p>
      </dd>
     
   </dl>
  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-function.session-regenerate-id-returnvalues">
  <h3 class="title">Valeurs de retour</h3>
  <p class="para">
   Cette fonction retourne <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> en cas de succès ou <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> si une erreur survient.
  </p>
 </div>


 <div class="refsect1 examples" id="refsect1-function.session-regenerate-id-examples">
  <h3 class="title">Exemples</h3>
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>Exemple #1 Exemple avec <span class="function"><strong>session_regenerate_id()</strong></span></strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Note: ce code ne fonctionne pas complètement, c'est un exemple!<br /><br /></span><span style="color: #0000BB">session_start</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">// Vérifier l'horodatage de destruction<br /></span><span style="color: #007700">if (isset(</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'destroyed'</span><span style="color: #007700">])<br />    &amp;&amp; </span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'destroyed'</span><span style="color: #007700">] &lt; </span><span style="color: #0000BB">time</span><span style="color: #007700">() - </span><span style="color: #0000BB">300</span><span style="color: #007700">) {<br />    </span><span style="color: #FF8000">// Ne devrait pas se produire habituellement. Cela pourrait être une attaque <br />    // ou en raison d'un réseau instable. Supprimez tout l'état d'authentification <br />    // de cette session utilisateurs.<br />    </span><span style="color: #0000BB">remove_all_authentication_flag_from_active_sessions</span><span style="color: #007700">(</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'userid'</span><span style="color: #007700">]);<br />    throw(new </span><span style="color: #0000BB">DestroyedSessionAccessException</span><span style="color: #007700">);<br />}<br /><br /><br /></span><span style="color: #0000BB">$old_sessionid </span><span style="color: #007700">= </span><span style="color: #0000BB">session_id</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">// Définir l'horodatage de destruction<br /></span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'destroyed'</span><span style="color: #007700">] = </span><span style="color: #0000BB">time</span><span style="color: #007700">(); </span><span style="color: #FF8000">// session_regenerate_id () enregistre les anciennes données de session<br /><br />// Il suffit d'appeler session_regenerate_id() peut entraîner la perte de session, etc.<br />// Voir l'exemple suivant.<br /></span><span style="color: #0000BB">session_regenerate_id</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">// La nouvelle session n'a pas besoin du timestamp de destruction<br /></span><span style="color: #007700">unset(</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'destroyed'</span><span style="color: #007700">]);<br /><br /></span><span style="color: #0000BB">$new_sessionid </span><span style="color: #007700">= </span><span style="color: #0000BB">session_id</span><span style="color: #007700">();<br /><br />echo </span><span style="color: #DD0000">"Ancienne Session: </span><span style="color: #0000BB">$old_sessionid</span><span style="color: #DD0000">&lt;br /&gt;"</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"Nouvelle Session: </span><span style="color: #0000BB">$new_sessionid</span><span style="color: #DD0000">&lt;br /&gt;"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>

  <p class="para">
   Le module de session actuel ne gère pas bien le réseau instable. Il faut 
   gérer l&#039;ID de session pour éviter la perte de session par session_regenerate_id.
  </p>

  <p class="para">
   <div class="example" id="example-2">
    <p><strong>Exemple #2 Éviter la perte de session par <span class="function"><strong>session_regenerate_id()</strong></span></strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Note: ce code ne fonctionne pas complètement, c'est un exemple!<br />// my_session_start() et my_session_regenerate_id() évitent les sessions perdues <br />// par le réseau instable. En outre, ce code peut empêcher l'exploitation de <br />// session volée par les attaquants.<br /><br /></span><span style="color: #007700">function </span><span style="color: #0000BB">my_session_start</span><span style="color: #007700">() {<br />    </span><span style="color: #0000BB">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">'destroyed'</span><span style="color: #007700">])) {<br />       if (</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'destroyed'</span><span style="color: #007700">] &lt; </span><span style="color: #0000BB">time</span><span style="color: #007700">()-</span><span style="color: #0000BB">300</span><span style="color: #007700">) {<br />           </span><span style="color: #FF8000">// Ne devrait pas se produire habituellement. Cela pourrait être une <br />           // attaque ou en raison d'un réseau instable. Supprimez tout l'état <br />           // d'authentification de cette session utilisateurs.<br />            </span><span style="color: #0000BB">remove_all_authentication_flag_from_active_sessions</span><span style="color: #007700">(</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'userid'</span><span style="color: #007700">]);<br />           throw(new </span><span style="color: #0000BB">DestroyedSessionAccessException</span><span style="color: #007700">);<br />       }<br />       if (isset(</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'new_session_id'</span><span style="color: #007700">])) {<br />           </span><span style="color: #FF8000">// Pas encore complètement expiré. Pourrait être perdu cookie par réseau instable.<br />           // Essayez à nouveau de définir le cookie d'ID de session approprié.<br />           // Remarque: n'essayez pas de redéfinir l'ID de session si vous <br />           // souhaitez supprimer l'état d'authentification.<br />           </span><span style="color: #0000BB">session_commit</span><span style="color: #007700">();<br />           </span><span style="color: #0000BB">session_id</span><span style="color: #007700">(</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'new_session_id'</span><span style="color: #007700">]);<br />           </span><span style="color: #FF8000">// Nouvel ID de session doit exister<br />           </span><span style="color: #0000BB">session_start</span><span style="color: #007700">();<br />           return;<br />       }<br />   }<br />}<br /><br />function </span><span style="color: #0000BB">my_session_regenerate_id</span><span style="color: #007700">() {<br />    </span><span style="color: #FF8000">// Le nouvel ID de session est requis pour définir l'ID de session approprié <br />    // lorsque l'ID de session n'est pas défini en raison d'un réseau instable.<br />    </span><span style="color: #0000BB">$new_session_id </span><span style="color: #007700">= </span><span style="color: #0000BB">session_create_id</span><span style="color: #007700">();<br />    </span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'new_session_id'</span><span style="color: #007700">] = </span><span style="color: #0000BB">$new_session_id</span><span style="color: #007700">;<br />    <br />    </span><span style="color: #FF8000">// Définit le timestamp de destruction<br />    </span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'destroyed'</span><span style="color: #007700">] = </span><span style="color: #0000BB">time</span><span style="color: #007700">();<br />    <br />    </span><span style="color: #FF8000">// Ecrit et ferme la session courante<br />    </span><span style="color: #0000BB">session_commit</span><span style="color: #007700">();<br /><br />    </span><span style="color: #FF8000">// Démarre la session avec un nouvel ID<br />    </span><span style="color: #0000BB">session_id</span><span style="color: #007700">(</span><span style="color: #0000BB">$new_session_id</span><span style="color: #007700">);<br />    </span><span style="color: #0000BB">ini_set</span><span style="color: #007700">(</span><span style="color: #DD0000">'session.use_strict_mode'</span><span style="color: #007700">, </span><span style="color: #0000BB">0</span><span style="color: #007700">);<br />    </span><span style="color: #0000BB">session_start</span><span style="color: #007700">();<br />    </span><span style="color: #0000BB">ini_set</span><span style="color: #007700">(</span><span style="color: #DD0000">'session.use_strict_mode'</span><span style="color: #007700">, </span><span style="color: #0000BB">1</span><span style="color: #007700">);<br />    <br />    </span><span style="color: #FF8000">// La nouvelle session n'en a pas besoin<br />    </span><span style="color: #007700">unset(</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'destroyed'</span><span style="color: #007700">]);<br />    unset(</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'new_session_id'</span><span style="color: #007700">]);<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
  
 </div>


 <div class="refsect1 seealso" id="refsect1-function.session-regenerate-id-seealso">
  <h3 class="title">Voir aussi</h3>
  <p class="para">
   <ul class="simplelist">
    <li><span class="function"><a href="function.session-id.php" class="function" rel="rdfs-seeAlso">session_id()</a> - Lit et/ou modifie l'identifiant courant de session</span></li>
    <li><span class="function"><a href="function.session-create-id.php" class="function" rel="rdfs-seeAlso">session_create_id()</a> - Cr&eacute;er un nouvel ID de session</span></li>
    <li><span class="function"><a href="function.session-start.php" class="function" rel="rdfs-seeAlso">session_start()</a> - D&eacute;marre une nouvelle session ou reprend une session existante</span></li>
    <li><span class="function"><a href="function.session-destroy.php" class="function" rel="rdfs-seeAlso">session_destroy()</a> - D&eacute;truit une session</span></li>
    <li><span class="function"><a href="function.session-reset.php" class="function" rel="rdfs-seeAlso">session_reset()</a> - R&eacute;initialise le tableau de session avec les valeurs originales</span></li>
    <li><span class="function"><a href="function.session-name.php" class="function" rel="rdfs-seeAlso">session_name()</a> - Lit et/ou modifie le nom de la session</span></li>
   </ul>
  </p>
 </div>


</div><?php manual_footer($setup); ?>