(PHP 4, PHP 5, PHP 7, PHP 8)
session_set_save_handler — Configure les fonctions de stockage de sessions
$open,$close,$read,$write,$destroy,$gc,$create_sid = ?,$validate_sid = ?,$update_timestamp = ?Il est possible d'enregistrer le prototype suivant :
$sessionhandler, bool $register_shutdown = true): boolsession_set_save_handler() 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.
Cette fonction a deux prototypes.
sessionhandlerUne instance d'une classe implémentant une ou plusieurs des interfaces suivantes: SessionHandlerInterface, et optionellement SessionIdInterface, et/ou SessionUpdateTimestampHandlerInterface, comme la classe SessionHandler, pour l'enregistrement comme gestionnaire de session.
register_shutdownEnregistre la fonction session_write_close() comme fonction register_shutdown_function().
openUne fonction de rappel avec la signature suivante :
$savePath, string $sessionName): bool
       La fonction de rappel open 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
       session_start(). La valeur retournée
       est true en cas de succès ou false si une erreur survient.
      
closeUne fonction de rappel avec la signature suivante :
       La fonction de rappel close 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 session_write_close() est appelée.
       La valeur retournée est true en cas de succès, ou false si une erreur
       survient.
      
readUne fonction de rappel avec la signature suivante :
$sessionId): string
       La fonction de rappel read doit toujours retournée
       une chaîne linéarisée contenant les données de session encodées
       ou une chaîne vide s'il n'y a aucune donnée à lire.
      
       Cette fonction de rappel est appelée en interne par PHP lorsque la session
       commence ou lorsque la fonction session_start() est appelée.
       Avant que cette fonction de rappel ne soit invoquée, PHP invoquera
       la fonction de rappel open.
      
       La valeur retournée par cette fonction de rappel doit être exactement du même
       format de linéarisation que celui passé pour le stockage à la fonction
       de rappel write. La valeur retournée sera délinéarisée
       automatiquement par PHP et utilisée pour peupler la variable superglobale
       $_SESSION. Malgré le fait que les données ressemblent fortement
       aux données issuées de la fonction serialize(), notez que c'est bien
       un format différent, qui est spécifié via l'option de configuration
       session.serialize_handler.
      
writeUne fonction de rappel avec la signature suivante :
$sessionId, string $data): bool
       La fonction de rappel write 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 linéarisée du contenu de la variable
       superglobale $_SESSION. La méthode de linéarisation utilisée en
       interne par PHP est spécifiée via l'option de configuration
       session.serialize_handler.
      
       Les données de session linéarisé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 read doit retourner
       la valeur exacte, originalement passée à la fonction de rappel write.
      
       Cette fonction de rappel est invoquée lorsque PHP s'arrête ou explicitement
       lorsque la fonction session_write_close() est appelée.
       Notez qu'après l'exécution de cette fonction, PHP exécutera en interne la
       fonction de rappel close.
       
Note:
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.
destroyUne fonction de rappel avec la signature suivante :
$sessionId): bool
       Cette fonction de rappel est exécutée lorsqu'une session est détruite
       avec la fonction session_destroy() ou avec
       session_regenerate_id() 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.
      
gcUne fonction de rappel avec la signature suivante :
$lifetime): bool
       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
       session.gc_probability et
       session.gc_divisor.
       La valeur de la durée de vie passée à cette fonction de rappel peut être
       définie via l'option de configuration session.gc_maxlifetime.
       La valeur retournée doit être true en cas de succès, ou false si une erreur survient.
      
create_sidUne fonction de rappel avec la signature suivante :
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.
validate_sidUne fonction de rappel avec la signature suivante :
$key): bool
       Cette fonction de rappel est exécuté quand une session va démarrer, un ID
       de session est fournie et que
       session.use_strict_mode
       est activé.
       key 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.
      
update_timestampUne fonction de rappel avec la signature suivante :
$key, string $val): bool
       Cette fonction de rappel est exécuté quand une session est mise à jour.
       key est l'ID de session, val
       sont les données de session.
       La valeur de retour devrait être true en cas de succès, false en cas
       d'échec.
      
   Cette fonction retourne true en cas de succès ou false si une erreur survient.
  
Exemple #1 Gestionnaire de session personnalisé : voir le code complet dans la documentation sur l'interface SessionHandlerInterface.
Nous montrons juste l'invocation ici, l'exemple complet peut être vu dans la documentation de l'interface SessionHandlerInterface.
Notez que nous utilisons ici le prototype orienté objet avec session_set_save_handler() 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.
<?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
    Les gestionnaires d'écriture write et de fermeture
    close 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.
   
Il est possible d'appeler session_write_close() 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.
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 session_write_close().