La classe SessionHandler SessionHandler
&reftitle.intro; La classe SessionHandler est une classe spéciale qui peut être utilisée pour exposer le gestionnaire de sauvegarde de session courant en interne de PHP, par héritage. Il y a sept méthodes qui représentent les sept fonctions de rappel du gestionnaire de sauvegarde de session interne (open, close, read, write, destroy, gc et create_sid). Par défaut, cette classe va représenter ce qui est défini dans le gestionnaire de sauvegarde interne, tel que défini par la directive de configuration session.save_handler, qui vaut habituellement files par défaut. D'autres gestionnaires de sauvegarde de session interne sont fournis par des extensions PHP, comme SQLite (avec le paramètre sqlite), Memcache (avec le paramètre memcache), et Memcached (avec le paramètre memcached). Lorsqu'une instance complète de SessionHandler est définie comme gestionnaire de sauvegarde en utilisant session_set_save_handler, elle remplacera le gestionnaire de sauvegarde courant. Une classe étendue depuis la classe SessionHandler permet d'écraser les méthodes, des intercepter, ou des filtrer en appelant la méthode de la classe parent qui remplace en dernier lieu le gestionnaire de session interne de PHP. Ceci permet, par exemple, d'intercepter les méthodes read et write pour crypter/décrypter les données de session, et de passer le résultat à la classe parente. Alternativement, il est possible d'aussi choisir d'écraser totalement une méthode comme la fonction de rappel de collection des gabarits gc. En raison du fait que la classe SessionHandler se comporte comme les méthodes du gestionnaire courant de sauvegarde de sessions interne, l'exemple ci-dessus de cryptage peut être appliqué à n'importe quel gestionnaire de sauvegarde sans avoir besoin de connaître les gestionnaires internes. Pour utiliser cette classe, il faut commencer par définir un gestionnaire de sauvegarde que l'on souhaite exposer en utilisant session.save_handler puis, passer une instance de la classe SessionHandler ou une étendue à la fonction session_set_save_handler. Veuillez noter que les méthodes de rappel de cette classe sont destinées à être appelées en interne par PHP, et ne sont pas prévues pour être appelées depuis le code de l'espace utilisateur. Les valeurs retournées seront utilisées de la même façon en interne par PHP. Pour plus d'informations sur le mécanisme des sessions, se référer à la documentation sur la fonction session_set_save_handler.
&reftitle.classsynopsis; SessionHandler implements SessionHandlerInterface SessionIdInterface &Methods;
&reftitle.notes; Cette classe a pour but d'exposer le gestionnaire de sauvegarde de session interne de PHP ; si l'on souhaite écrire le gestionnaire de sauvegarde personnalisé, il faut implémenter l'interface SessionHandlerInterface au lieu d'étendre la classe SessionHandler.
&reftitle.examples; Utilisation de la classe <classname>SessionHandler</classname> pour ajouter un cryptage aux gestionnaires de sauvegarde interne de PHP. key = $key; } public function read($id) { $data = parent::read($id); if (!$data) { return ""; } else { return decrypt($data, $this->key); } } public function write($id, $data) { $data = encrypt($data, $this->key); return parent::write($id, $data); } } // Nous interceptons le gestionnaire 'files' natif, mais ceci // fonctionnera de la même façon avec les autres gestionnaires internes // comme 'sqlite', 'memcache' ou 'memcached' // qui sont fournis via des extensions PHP. ini_set('session.save_handler', 'files'); $key = 'secret_string'; $handler = new EncryptedSessionHandler($key); session_set_save_handler($handler, true); session_start(); // processus pour définir et récupérer des valeurs avec la clé, depuis $_SESSION ]]> Vu que les méthodes de cette classe sont prévues pour être appelées en interne par PHP car faisant partie du mécanisme normal des sessions, les classes enfants appellent les méthodes parents (c.-à-d. le gestionnaire natif interne actuellement) et doivent retourner &false; tant que la session n'a pas encore démarrée (soit automatiquement, ou explicitement via la fonction session_start). Ceci est très important à considérer lors de l'écriture des tests unitaires où les méthodes de la classe peuvent être invoquées manuellement.
&reference.session.entities.sessionhandler;