<?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-set-save-handler.php',
    1 => 'session_set_save_handler',
    2 => 'Configure les fonctions de stockage de sessions',
  ),
  'up' => 
  array (
    0 => 'ref.session.php',
    1 => 'Fonctions Session',
  ),
  'prev' => 
  array (
    0 => 'function.session-set-cookie-params.php',
    1 => 'session_set_cookie_params',
  ),
  'next' => 
  array (
    0 => 'function.session-start.php',
    1 => 'session_start',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'reference/session/functions/session-set-save-handler.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.session-set-save-handler" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">session_set_save_handler</h1>
  <p class="verinfo">(PHP 4, PHP 5, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">session_set_save_handler</span> &mdash; <span class="dc-title">Configure les fonctions de stockage de sessions</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-function.session-set-save-handler-description">
  <h3 class="title">Description</h3>
  <div class="methodsynopsis dc-description">
   <span class="methodname"><strong>session_set_save_handler</strong></span>(<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> <code class="parameter">$open</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> <code class="parameter">$close</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> <code class="parameter">$read</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> <code class="parameter">$write</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> <code class="parameter">$destroy</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> <code class="parameter">$gc</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> <code class="parameter">$create_sid</code><span class="initializer"> = ?</span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> <code class="parameter">$validate_sid</code><span class="initializer"> = ?</span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> <code class="parameter">$update_timestamp</code><span class="initializer"> = ?</span></span><br>): <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></div>

  <p class="para rdfs-comment">
   Il est possible d&#039;enregistrer le prototype suivant :
  </p>
  <div class="methodsynopsis dc-description"><span class="methodname"><strong>session_set_save_handler</strong></span>(<span class="methodparam"><span class="type"><a href="language.types.object.php" class="type object">object</a></span> <code class="parameter">$sessionhandler</code></span>, <span class="methodparam"><span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> <code class="parameter">$register_shutdown</code><span class="initializer"> = <strong><code><a href="reserved.constants.php#constant.true">true</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_set_save_handler()</strong></span> 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&#039;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.
  </p>
 </div>


 <div class="refsect1 parameters" id="refsect1-function.session-set-save-handler-parameters">
  <h3 class="title">Liste de paramètres</h3>
  <p class="para">
   Cette fonction a deux prototypes.
   <dl>
    
     <dt><code class="parameter">sessionhandler</code></dt>
     <dd>
      <p class="para">
       Une instance d&#039;une classe implémentant une ou plusieurs des interfaces suivantes:
       <span class="interfacename"><a href="class.sessionhandlerinterface.php" class="interfacename">SessionHandlerInterface</a></span>, et optionnellement
       <span class="interfacename"><a href="class.sessionidinterface.php" class="interfacename">SessionIdInterface</a></span>, et/ou
       <span class="interfacename"><a href="class.sessionupdatetimestamphandlerinterface.php" class="interfacename">SessionUpdateTimestampHandlerInterface</a></span>,
       comme la classe <span class="classname"><a href="class.sessionhandler.php" class="classname">SessionHandler</a></span>,
       pour l&#039;enregistrement comme gestionnaire de session.
      </p>
     </dd>
    
    
     <dt><code class="parameter">register_shutdown</code></dt>
     <dd>
      <p class="para">
       Enregistre la fonction <span class="function"><a href="function.session-write-close.php" class="function">session_write_close()</a></span>
       comme fonction <span class="function"><a href="function.register-shutdown-function.php" class="function">register_shutdown_function()</a></span>.
      </p>
     </dd>
    
   </dl>

   ou

   <dl>
    
     <dt><code class="parameter">open</code></dt>
     <dd>
      <p class="para">
       Une fonction de rappel avec la signature suivante :
       <div class="methodsynopsis dc-description">
        <span class="methodname"><span class="replaceable">open</span></span>(<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$savePath</code></span>, <span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$sessionName</code></span>): <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></div>

      </p>
      <p class="para">
       La fonction de rappel <code class="literal">open</code> fonctionne comme un constructeur
       dans une classe, et est exécutée lorsque la session s&#039;ouvre.
       C&#039;est la première fonction de rappel exécutée lorsque la session
       démarre automatiquement ou manuellement avec la fonction
       <span class="function"><a href="function.session-start.php" class="function">session_start()</a></span>. La valeur retournée
       est <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>
     </dd>
    
    
     <dt><code class="parameter">close</code></dt>
     <dd>
      <p class="para">
       Une fonction de rappel avec la signature suivante :
       <div class="methodsynopsis dc-description"><span class="methodname"><span class="replaceable">close</span></span>(): <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></div>

      </p>
      <p class="para">
       La fonction de rappel <code class="literal">close</code> 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&#039;exécuter. Elle est également
       appelée lorsque la fonction <span class="function"><a href="function.session-write-close.php" class="function">session_write_close()</a></span> est appelée.
       La valeur retournée est <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>
     </dd>
    
    
     <dt><code class="parameter">read</code></dt>
     <dd>
      <p class="para">
       Une fonction de rappel avec la signature suivante :
       <div class="methodsynopsis dc-description"><span class="methodname"><span class="replaceable">read</span></span>(<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$sessionId</code></span>): <span class="type"><a href="language.types.string.php" class="type string">string</a></span></div>

      </p>
      <p class="para">
       La fonction de rappel <code class="parameter">read</code> doit toujours retourner
       une chaîne sérialisée contenant les données de session encodées
       ou une chaîne vide s&#039;il n&#039;y a aucune donnée à lire.
      </p>
      <p class="para">
       Cette fonction de rappel est appelée en interne par PHP lorsque la session
       commence ou lorsque la fonction <span class="function"><a href="function.session-start.php" class="function">session_start()</a></span> est appelée.
       Avant que cette fonction de rappel ne soit invoquée, PHP invoquera
       la fonction de rappel <code class="parameter">open</code>.
      </p>
      <p class="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 <code class="parameter">write</code>. La valeur retournée sera désérialisée
       automatiquement par PHP et utilisée pour peupler la variable superglobale
       <var class="varname"><a href="reserved.variables.session.php" class="classname">$_SESSION</a></var>. Malgré le fait que les données ressemblent fortement
       aux données issues de la fonction <span class="function"><a href="function.serialize.php" class="function">serialize()</a></span>, il est à noter que c&#039;est bien
       un format différent, qui est spécifié via l&#039;option de configuration
       <a href="session.configuration.php#ini.session.serialize-handler" class="link">session.serialize_handler</a>.
      </p>
     </dd>
    
    
     <dt><code class="parameter">write</code></dt>
     <dd>
      <p class="para">
       Une fonction de rappel avec la signature suivante :
       <div class="methodsynopsis dc-description"><span class="methodname"><span class="replaceable">write</span></span>(<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$sessionId</code></span>, <span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$data</code></span>): <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></div>

      </p>
      <p class="para">
       La fonction de rappel <code class="parameter">write</code> est appelée lorsque la session
       doit être sauvegardée et fermée. Cette fonction de rappel reçoit l&#039;identifiant de
       la session courante ainsi qu&#039;une version sérialisée du contenu de la variable
       superglobale <var class="varname"><a href="reserved.variables.session.php" class="classname">$_SESSION</a></var>. La méthode de sérialisation utilisée en
       interne par PHP est spécifiée via l&#039;option de configuration
       <a href="session.configuration.php#ini.session.serialize-handler" class="link">session.serialize_handler</a>.
      </p>
      <p class="para">
       Les données de session sérialisées passées à cette fonction de rappel doivent être
       stockées en utilisant l&#039;identifiant de session fourni. Lors de la récupération
       de ces données, la fonction de rappel <code class="parameter">read</code> doit retourner
       la valeur exacte, originalement passée à la fonction de rappel <code class="parameter">write</code>.
      </p>
      <p class="para">
       Cette fonction de rappel est invoquée lorsque PHP s&#039;arrête ou explicitement
       lorsque la fonction <span class="function"><a href="function.session-write-close.php" class="function">session_write_close()</a></span> est appelée.
       Il est à noter qu&#039;après l&#039;exécution de cette fonction, PHP exécutera en interne la
       fonction de rappel <code class="parameter">close</code>.
       <blockquote class="note"><p><strong class="note">Note</strong>: 
        <p class="para">
         Le gestionnaire d&#039;écriture n&#039;est pas exécuté tant que le flux de sortie
         n&#039;aura pas été fermé. Aussi, la sortie des requêtes de débogage
         du gestionnaire &quot;write&quot; ne sera jamais affichée dans le navigateur.
         Si la sortie de débogage est nécessaire, il est suggéré qu&#039;elle soit
         plutôt orientée dans un fichier.
        </p>
       </p></blockquote>
      </p>
     </dd>
    
    
     <dt><code class="parameter">destroy</code></dt>
     <dd>
      <p class="para">
       Une fonction de rappel avec la signature suivante :
       <div class="methodsynopsis dc-description">
        <span class="methodname"><span class="replaceable">destroy</span></span>(<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$sessionId</code></span>): <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></div>

      </p>
      <p class="para">
       Cette fonction de rappel est exécutée lorsqu&#039;une session est détruite
       avec la fonction <span class="function"><a href="function.session-destroy.php" class="function">session_destroy()</a></span> ou avec
       <span class="function"><a href="function.session-regenerate-id.php" class="function">session_regenerate_id()</a></span> avec le paramètre de destruction défini
       à <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong>. La valeur retournée doit être <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>
     </dd>
    
    
     <dt><code class="parameter">gc</code></dt>
     <dd>
      <p class="para">
       Une fonction de rappel avec la signature suivante :
       <div class="methodsynopsis dc-description"><span class="methodname"><span class="replaceable">gc</span></span>(<span class="methodparam"><span class="type"><a href="language.types.integer.php" class="type int">int</a></span> <code class="parameter">$lifetime</code></span>): <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></div>

      </p>
      <p class="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ée par les options de configuration
       <a href="session.configuration.php#ini.session.gc-probability" class="link">session.gc_probability</a> et
       <a href="session.configuration.php#ini.session.gc-divisor" class="link">session.gc_divisor</a>.
       La valeur de la durée de vie passée à cette fonction de rappel peut être
       définie via l&#039;option de configuration <a href="session.configuration.php#ini.session.gc-maxlifetime" class="link">session.gc_maxlifetime</a>.
       La valeur retournée doit être <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>
     </dd>
    
    
     <dt><code class="parameter">create_sid</code></dt>
     <dd>
      <p class="para">
       Une fonction de rappel avec la signature suivante :
       <div class="methodsynopsis dc-description"><span class="methodname"><span class="replaceable">create_sid</span></span>(): <span class="type"><a href="language.types.string.php" class="type string">string</a></span></div>

      </p>
      <p class="para">
       Cette fonction de rappel est exécutée lorsqu&#039;un nouvel ID de session
       est nécessaire. Aucun paramètre n&#039;est fourni, et la valeur retournée doit
       être une chaîne de caractères qui est un ID de session valide pour le
       gestionnaire.
      </p>
     </dd>
    
    
     <dt><code class="parameter">validate_sid</code></dt>
     <dd>
      <p class="para">
       Une fonction de rappel avec la signature suivante :
       <div class="methodsynopsis dc-description"><span class="methodname"><span class="replaceable">validate_sid</span></span>(<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$key</code></span>): <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></div>

      </p>
      <p class="para">
       Cette fonction de rappel est exécutée quand une session va démarrer, un ID
       de session est fourni et que
       <a href="session.configuration.php#ini.session.use-strict-mode" class="link">session.use_strict_mode</a>
       est activé.
       <code class="parameter">key</code> est l&#039;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 <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> en cas de succès, <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> en cas
       d&#039;échec.
      </p>
     </dd>
    
    
     <dt><code class="parameter">update_timestamp</code></dt>
     <dd>
      <p class="para">
       Une fonction de rappel avec la signature suivante :
       <div class="methodsynopsis dc-description"><span class="methodname"><span class="replaceable">update_timestamp</span></span>(<span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$key</code></span>, <span class="methodparam"><span class="type"><a href="language.types.string.php" class="type string">string</a></span> <code class="parameter">$val</code></span>): <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></div>

      </p>
      <p class="para">
       Cette fonction de rappel est exécutée quand une session est mise à jour.
       <code class="parameter">key</code> est l&#039;ID de session, <code class="parameter">val</code>
       sont les données de session.
       La valeur de retour devrait être <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> en cas de succès, <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> en cas
       d&#039;échec.
      </p>
     </dd>
    
   </dl>
  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-function.session-set-save-handler-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-set-save-handler-examples">
  <h3 class="title">Exemples</h3>
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>Exemple #1 
     Gestionnaire de session personnalisé : voir le code complet
     dans la documentation sur l&#039;interface <span class="classname"><a href="class.sessionhandlerinterface.php" class="classname">SessionHandlerInterface</a></span>.
    </strong></p>
    <div class="example-contents"><p>
     Nous montrons juste l&#039;invocation ici, l&#039;exemple complet peut être vu dans
     la documentation de l&#039;interface
     <span class="classname"><a href="class.sessionhandlerinterface.php" class="classname">SessionHandlerInterface</a></span>.
    </p></div>
    <div class="example-contents"><p>
     Il est à noter que nous utilisons ici le prototype orienté objet avec
     <span class="function"><strong>session_set_save_handler()</strong></span> et enregistrons la fonction
     d&#039;arrêt en utilisant le drapeau dans le paramètre de la fonction. C&#039;est généralement
     préférable lors de l&#039;enregistrement d&#039;objets comme gestionnaires de sauvegarde de session.
    </p></div>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">MySessionHandler </span><span style="color: #007700">implements </span><span style="color: #0000BB">SessionHandlerInterface<br /></span><span style="color: #007700">{<br />    </span><span style="color: #FF8000">// implémentation de l'interface ici<br /></span><span style="color: #007700">}<br /><br /></span><span style="color: #0000BB">$handler </span><span style="color: #007700">= new </span><span style="color: #0000BB">MySessionHandler</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">session_set_save_handler</span><span style="color: #007700">(</span><span style="color: #0000BB">$handler</span><span style="color: #007700">, </span><span style="color: #0000BB">true</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">session_start</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">// processus pour définir et récupérer les valeurs par leurs clés depuis $_SESSION</span></span></code></div>
    </div>

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


 <div class="refsect1 notes" id="refsect1-function.session-set-save-handler-notes">
  <h3 class="title">Notes</h3>
  <div class="warning"><strong class="warning">Avertissement</strong>
   <p class="para">
    Les gestionnaires d&#039;écriture <code class="parameter">write</code> et de fermeture
    <code class="parameter">close</code> 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&#039;exécution ne fera que s&#039;arrêter de façon inattendue.
   </p>
   <p class="para">
    Il est possible d&#039;appeler <span class="function"><a href="function.session-write-close.php" class="function">session_write_close()</a></span> depuis
    le destructeur pour résoudre ce problème mais la façon la plus élégante
    est d&#039;enregistrer la fonction d&#039;arrêt tel que décrit ci-dessus.
   </p>
  </div>
  <div class="warning"><strong class="warning">Avertissement</strong>
   <p class="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 <span class="function"><a href="function.session-write-close.php" class="function">session_write_close()</a></span>.
   </p>
  </div>
 </div>


 <div class="refsect1 seealso" id="refsect1-function.session-set-save-handler-seealso">
  <h3 class="title">Voir aussi</h3>
  <p class="para">
   <ul class="simplelist">
    <li>
     La directive de configuration <a href="session.configuration.php#ini.session.save-handler" class="link">session.save_handler</a>
    </li>
    <li>
     La directive de configuration
     <a href="session.configuration.php#ini.session.serialize-handler" class="link">session.serialize_handler</a>.
    </li>
    <li><span class="function"><a href="function.register-shutdown-function.php" class="function" rel="rdfs-seeAlso">register_shutdown_function()</a> - Enregistre une fonction de rappel pour ex&eacute;cution &agrave; l'extinction</span></li>
    <li><span class="function"><a href="function.session-register-shutdown.php" class="function" rel="rdfs-seeAlso">session_register_shutdown()</a> - Fonction de fermeture de session</span></li>
    <li>
     Se reporter à <a href="https://github.com/php/php-src/blob/master/ext/session/tests/save_handler.inc" class="link external">&raquo;&nbsp;save_handler.inc</a>
     pour une mise en œuvre procédurale complète
    </li>
   </ul>
  </p>
 </div>


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