Dans PHP, session_register_shutdown () est une fonction utilisée pour enregistrer un rappel de fermeture de session. Sa fonction principale est d'appeler automatiquement session_write_close () à la fin de l'exécution du script pour s'assurer que les données de session sont enregistrées correctement. Cependant, lors de l'utilisation réelle, de nombreux développeurs rencontreront le problème que Session_Register_Shutdown () ne peut pas prendre effet, ce qui entraîne une session incapable d'être écrite normalement ou de ne pas enregistrer. Cet article commencera à partir des éléments de configuration communs et des détails d'utilisation pour vous aider à dépanner et à résoudre ce problème.
Session_register_shutdown () est une fonction introduite après PHP 5.4.0. Il est utilisé pour enregistrer un rappel qui appelle automatiquement session_write_close () à la fin du script. Cela peut empêcher le développeur de devoir appeler manuellement session_write_close () , empêchant le problème que les données de session ne sont pas écrites en raison de l'oubli de l'appeler.
<?php
session_start();
session_register_shutdown();
$_SESSION['user'] = 'Alice';
// À la fin du script,session Sera automatiquement écrit
?>
Les principales raisons sont les suivantes:
Cette fonction n'est prise en charge que dans PHP 5.4.0. Si vous utilisez une version antérieure de PHP, elle ne prendra pas effet.
Certains environnements peuvent avoir désactivé cette fonction, vérifiez la configuration Disabled_Functions .
Lorsque Session.Auto_Start est activé (valeur de 1), PHP commencera automatiquement la session. L'appel de session_register_shutdown () à l'heure actuelle peut être invalide car le cycle de vie de la session a été contrôlé par démarrage automatique.
Il est recommandé d'éteindre cette configuration:
session.auto_start = 0
Si le code ou le framework a appelé ses propres session_write_close () , puis appelé session_register_shutdown () pour s'inscrire, il n'y aura aucune chance d'exécuter, qui ne prendra pas effet.
Veuillez vérifier votre configuration PHP dans l'ordre suivant pour vous assurer que l'environnement prend en charge session_register_shutdown () :
<?php
// Vérifier PHP Version,doit >= 5.4.0
echo 'PHP Version: ' . phpversion();
// Vérifier disable_functions Configuration,Confirmez que la fonction n'est pas désactivée
echo 'Disabled functions: ' . ini_get('disable_functions');
// Vérifier session.auto_start,Il est recommandé de fermer
echo 'session.auto_start: ' . ini_get('session.auto_start');
// Vérifier session.save_handler,En général files
echo 'session.save_handler: ' . ini_get('session.save_handler');
// Exemple de code de détection
if (function_exists('session_register_shutdown')) {
echo "session_register_shutdown() Disponible\n";
} else {
echo "session_register_shutdown() 不Disponible\n";
}
?>
Améliorer PHP à 5.4.0 et supérieur.
Réglé dans php.ini :
session.auto_start = 0
Ou assurez-vous que la session n'est pas automatiquement activée au début du code.
Assurez-vous que la session n'est pas fermée dans la logique du programme à l'avance. Après avoir utilisé ses session_register_shutdown () , vous n'avez pas à appeler manuellement session_write_close () .
<?php
// Utiliser correctement session_register_shutdown
session_start();
session_register_shutdown();
$_SESSION['user'] = 'Bob';
// Aucun appel manuel n'est requis ici session_write_close()
echo "Session 写入将在À la fin du script自动完成。";
?>