Dans PHP, la fonction session_register_shutdown () est utilisée pour enregistrer une fonction de rappel qui est automatiquement exécutée lorsque la session est fermée. En théorie, il peut nous aider à enregistrer automatiquement les données de session lorsque le script est exécuté. Cependant, dans une utilisation réelle, de nombreux développeurs ont rencontré un problème: même si Session_Register_Shutdown () est appelé, les données de session ne peuvent toujours pas être enregistrées automatiquement, ce qui entraîne la perte des informations de session ou la mise à jour en temps opportun.
Cet article analysera en détail les causes profondes de ce problème et fournira plusieurs solutions réalisables pour vous aider à gérer correctement la sauvegarde automatique des séances.
Session_register_shutdown () est en fait une fonction de niveau relativement bas. Il appellera automatiquement session_write_close () lorsque PHP ferme la session pour enregistrer les données de session. Cependant, à partir de PHP 5.4, cette fonction a été marquée comme rejetée et fonctionne instable dans certains environnements, en particulier lorsqu'il y a des appels précoces vers session_write_close () ou des opérations liées au tampon de sortie dans le script, session_register_shutdown () ne peut pas déclencher l'action de sauvegarde normalement.
De plus, session_register_shutdown () appelle automatiquement session_write_close () lorsque la session est fermée. Si le développeur a activement appelé session_write_close () dans le code, l'effet des appels suivants sera ignoré, ce qui entraînera une session correctement.
Étant donné que session_register_shutdown () a été obsolète, il est recommandé d'utiliser Register_Shutdown_Function () directement combiné avec session_write_close () pour s'assurer que la session est appelée manuellement pour enregistrer à la fin du script.
Exemple de code:
<?php
session_start();
// Enregistrer manuellement à la fin du script session
register_shutdown_function(function() {
session_write_close();
});
// Réviser session données
$_SESSION['user'] = 'Zhang San';
echo "Session Ensemble";
?>
La clé ici consiste à utiliser registre_shutdown_function () , qui appellera les fonctions anonymes après l'exécution du script, garantissant ainsi que Session_write_close () est appelé et garantissant que les données de session sont enregistrées correctement.
Si session_write_close () a été appelé dans d'autres parties du script, l'appel à register_shutdown_function () ou session_register_shutdown () peut être invalide. Le code doit être vérifié pour éviter les appels répétés.
Par exemple, le code suivant entraînera la fin de l'enregistrement de la session:
<?php
session_start();
session_write_close(); // Fermé tôt session
// Appelé lorsque l'inscription est fermée,En fait, il ne reviendra pas en vigueur
session_register_shutdown();
$_SESSION['user'] = 'Li si';
echo "Session Probablement pas sauvé";
?>
La méthode correcte consiste à supprimer la session_write_close () qui est fermée à l'avance:
<?php
session_start();
session_register_shutdown();
$_SESSION['user'] = 'Li si';
echo "Session Sauvé";
?>
Cependant, il est recommandé de passer à la méthode d'écriture de la solution un pour éviter d'utiliser des fonctions jetées.
Dans de nombreux scénarios, appeler session_write_close () directement avant la fin du code est également une approche stable et simple:
<?php
session_start();
$_SESSION['cart'][] = 'marchandisesA';
// Après avoir traité toute logique commerciale,Écriture manuelle session
session_write_close();
echo "CART DE COMME";
?>
Cette méthode est plus compatible et évite la complexité de s'appuyer sur l'enregistrement automatique.
Pour plus d'informations sur le traitement des sessions PHP, veuillez vous référer à la documentation officielle:
<a href="https://m66.net/manual/zh/function.register-shutdown-function.php">PHP officiel register_shutdown_function() document</a>
Étiquettes associées:
session