(PHP 4, PHP 5, PHP 7, PHP 8)
session_set_save_handler - Définissez la fonction de stockage de session définie par l'utilisateur
illustrer
session_set_save_handler( callable $open, callable $close, callable $read, callable $write, callable $destroy, callable $gc, callable $create_sid = ?, callable $validate_sid = ?, callable $update_timestamp = ? ): bool
Vous pouvez enregistrer une fonction de stockage de session personnalisée à l'aide de la méthode suivante:
session_set_save_handler(object $sessionhandler, bool $register_shutdown = true): bool
session_set_save_handler () définit une fonction de stockage de session définie par l'utilisateur. Si vous souhaitez utiliser une méthode autre que le mécanisme de stockage de session intégré de PHP, vous pouvez utiliser cette fonction. Par exemple, les fonctions de stockage de session peuvent être personnalisées pour stocker les données de session dans une base de données.
Paramètres Il existe 2 prototypes de cette fonction:
mancheur de session
Un objet qui implémente sessionhandlerInterface, SessionIdInterface (facultatif) et / ou session upDateTimeStampHandlerInterface interfaces, tels que sessionhandler.
registre_shutdown
Enregistrez la fonction session_write_close () en fonction de la fonction register_shutdown_function ().
ou
Open (String $ SavePath, String $ sessionname)
Le rappel callable de signature suivant est implémenté:
open(string $savePath, string $sessionName): bool
La fonction de rappel ouverte est similaire au constructeur de classe et sera appelée lors de l'ouverture de la session. Il s'agit de la première fonction de rappel pour démarrer la session automatiquement ou démarrer manuellement la session en appelant session_start (). Cette opération de fonction de rappel renvoie vrai avec succès, sinon faux.
Fermer
La fonction de rappel proche est similaire au destructeur de la classe. Appelé après l'appel de la fonction de rappel d'écriture. La fonction de rappel de fermeture est également appelée après que la fonction Session_Write_Close () est appelée. Cette opération de fonction de rappel renvoie vrai avec succès, sinon faux.
lire
Le rappel callable de signature suivant est implémenté:
read(string $sessionId): string
S'il y a des données dans la session, la fonction de rappel de lecture doit renvoyer une chaîne codée (sérialisée) des données de session. S'il n'y a pas de données dans la session, la fonction de rappel de lecture renvoie une chaîne vide.
Après avoir démarré automatiquement la session ou démarré manuellement la session en appelant la fonction Session_Start (), PHP appelle en interne la fonction de rappel de lecture pour obtenir des données de session. PHP appelle la fonction de rappel ouverte avant d'appeler Read.
Le format de chaîne sérialisé renvoyé par le rappel de lecture doit être exactement le même que le format lorsque le rappel d'écriture enregistre les données. PHP désérialise automatiquement la chaîne retournée et remplit la variable Global $ _Session. Bien que les données ressemblent beaucoup à la fonction Serialize (), il convient de noter qu'ils sont différents. Veuillez vous référer à: session.serialize_handler.
Écrire
Le rappel callable de signature suivant est implémenté:
write(string $sessionId, string $data): bool
La fonction de rappel d'écriture est appelée lorsque la session enregistre les données. Cette fonction de rappel prend en tant que paramètres L'ID de session actuel et la chaîne après sérialisation des données dans $ _SESSION. Le processus de sérialisation des données de session est complété par PHP en fonction de la valeur de réglage Session.serialize_handler.
Les données sérialisées seront associées à l'ID de session pour le stockage. Lorsque la fonction de rappel de lecture est appelée pour obtenir des données, les données renvoyées doivent être complètement cohérentes avec les données transmises dans la fonction de rappel d'écriture.
PHP appellera cette fonction de rappel après l'exécution du script ou que la fonction Session_Write_Close () est appelée. Notez qu'après avoir appelé cette fonction de rappel, la fonction de rappel serrée sera appelée en interne dans PHP.
Avis:
PHP appellera la fonction de rappel d'écriture uniquement après l'écriture et la fermeture du flux de sortie, de sorte que les informations de débogage de la fonction de rappel d'écriture ne seront pas sorties vers le navigateur. Si vous avez besoin d'utiliser la sortie de débogage dans la fonction de rappel d'écriture, il est recommandé d'écrire la sortie de débogage dans un fichier.
détruire
Le rappel callable de signature suivant est implémenté:
destroy(string $sessionId): bool
Cette fonction de rappel est appelée lorsque la fonction session_destroy () est appelée, ou que la fonction Session_RegeReate_id () est appelée et que le paramètre Destroy est défini sur true. Cette opération de fonction de rappel renvoie vrai avec succès, sinon faux.
GC
Le rappel callable de signature suivant est implémenté:
gc(int $lifetime): bool
Afin de nettoyer les anciennes données de la session, PHP appellera la fonction de rappel de collecte des ordures de temps à autre. Le cycle d'appel est contrôlé par les paramètres session.gc_probability et session.gc_divisor. Le paramètre Lifetime transmis dans cette fonction de rappel est défini par session.gc_maxlifetime. Cette opération de fonction de rappel renvoie vrai avec succès, sinon faux.
create_sid
Le rappel callable de signature suivant est implémenté:
create_sid(): string
Exécutez cette fonction de rappel lorsqu'un nouvel ID de session est requis. Il ne passera pas dans les paramètres lorsqu'il est appelé, et sa valeur de retour doit être un ID de session valide et formée par chaîne.
valider_sid
Le rappel callable de signature suivant est implémenté:
validate_sid(string $key): bool
Après l'ouverture de session.use_strict_mode, ce rappel sera exécuté lors de démarrage d'une session, lorsque l'ID de session sera fourni. La clé de paramètre est l'ID de session à vérifier. Si la session de cet ID existe déjà, c'est un ID de session valide. La valeur de retour doit être vraie sur le succès et la fausse échec.
Update_timestamp
Le rappel callable de signature suivant est implémenté:
update_timestamp(string $key, string $val): bool
Exécutez ce rappel lors de la mise à jour de la session. La clé de paramètre est l'ID de session; Le paramètre VAL est les données de session. La valeur de retour doit être vraie sur le succès et la fausse échec.
Valeur de retour?
Renvoie vrai sur le succès ou FAUX en échec.
Exemple?
Exemple # 1 Handler de session personnalisé: voir SessionHandlerInterface pour le code complet.
Seule la méthode d'appel est répertoriée ici. Pour le code complet, voir SessionHandlerInterface.
Ici, le prototype OOP de la fonction session_set_save_handler () est utilisé et le deuxième paramètre est utilisé pour enregistrer la fonction d'arrêt. Ceci est recommandé lors de l'enregistrement d'un objet en tant que gestionnaire de sauvegarde de session.
<?php class MySessionHandler implements SessionHandlerInterface { // 在这里实现接口} $handler = new MySessionHandler(); session_set_save_handler($handler, true); session_start(); // 现在可以使用$_SESSION 保存以及获取数据了
AVERTISSEMENT COMMENTAIRE: Les fonctions d'écriture et de rappel ferment ne seront pas appelées une fois l'objet détruit. Par conséquent, les objets ne peuvent pas être utilisés dans ces deux fonctions de rappel, ni les exceptions ne peuvent pas être lancées. Si une exception est lancée dans une fonction, PHP ne l'attrapera ni ne le suivra, ce qui entraînera une fin du programme anormalement. Mais les destructeurs d'objets peuvent utiliser des sessions.
La fonction session_write_close () peut être appelée dans le destructeur pour résoudre ce problème. Cependant, l'enregistrement de la fonction de rappel d'arrêt est un moyen plus fiable de le faire.
Avertissement Si la session est close une fois le script terminé, le répertoire de travail actuel peut avoir été modifié pour certains SAPIS. La fonction session_write_close () peut être appelée pour fermer la session avant la fin de l'exécution du script.