CakeFest 2024: The Official CakePHP Conference

Gestion personnalisée des sessions

Pour implémenter un stockage en base de données, ou toute autre méthode, vous aurez besoin de la fonction session_set_save_handler() pour paramétrer vos propres fonctions de stockage. Un gestionnaires de session peut être crée en utilisant l'interface SessionHandlerInterface ou en étendant les gestionnaires internes de PHP en héritant de la classe SessionHandler.

Les fonctions de rappel précisées dans session_set_save_handler() sont des méthodes appelées par PHP pendant le cycle de vie de la session: open, read, write et close ainsi que les fonctions de ménage destroy pour supprimer une session et gc pour une collecte périodique des gabarits.

Ainsi, PHP a toujours besoin d'un gestionnaire de sessions. Par défaut il s'agit du gestionnaire interne 'files'. Un gestionnaire personnalisé peut être indiqué au moyen de session_set_save_handler(). D'autres gestionnaires alternatifs peuvent être proposés par des extensions PHP, comme sqlite, memcache et memcached et peuvent être utilisés via session.save_handler.

Lorsque la session démarre, PHP appelera en interne la fonction open du gestionnaire, suivie de read qui doit alors retourner une chaine encodée exactement comme elle a été passée lors du stockage. Une fois que la fonction de rappel de read a retourné sa chaine, PHP va alors la décoder et peupler la super-globale $_SESSION en conséquence.

Lorsque PHP se termine, (ou lorsque session_write_close() est appelée), il va en interne encoder le contenu de $_SESSION et le passer avec l'ID de session à la fonction write. Après write, PHP invoquera close.

Lorsqu'une session est détruite, PHP appelera destroy avec l'ID de session.

PHP appelera la fonction de rappel gc de temps en temps pour nettoyer les sessions expirées en fonction de leur temps de vie maximum. Cet appel devrait mener à la destruction des enregistrements dans le support de stockage qui n'ont été accédés depuis $lifetime.

add a note

User Contributed Notes 1 note

up
-56
tony at marston-home dot demon dot co dot uk
5 years ago
Your custom session handler should not contain calls to any of the session functions, such as session_name() or session_id(), as the relevant values are passed as arguments on various handler methods. Attempting to obtain values from alternative sources may not work as expected.
To Top