Dans le développement de PHP, c'est un moyen important de maintenir l'état de l'utilisateur. Plusieurs fois, les développeurs rencontreront le problème de la perte de données de session, ce qui amènera les utilisateurs à se connecter des informations, un contenu de panier et d'autres données clés à enregistrer normalement, et l'expérience est très mauvaise. Avez-vous rencontré des situations similaires? En fait, le problème est très probable que vous n'utilisez pas correctement la fonction Session_Register_Shutdown () .
session_write_close () n'a pas été appelé à temps
PHP enregistrera automatiquement les données de session à la fin du script, mais si le script s'exécute trop tôt ou anormalement, la session peut ne pas être écrite à temps.
Les demandes simultanées provoquent la verrouillage du fichier de session
La session de PHP est un mécanisme de verrouillage de fichiers. Lorsque plusieurs demandes fonctionnent simultanément la même session, cela peut entraîner un blocage ou même une perte.
Utilisation incorrecte de la fonction de session <br> Par exemple, Session_Destroy () est appelé en premier, ou la session n'est pas traitée correctement après que session_start () est appelée.
Session_register_shutdown () est une nouvelle fonction ajoutée à PHP 7.0.0. Il enregistre un rappel qui ferme automatiquement la session, garantissant que les données de session sont correctement écrites au stockage à la fin du script.
En d'autres termes, si vous utilisez un mécanisme de traitement de session personnalisé ou un script de longue date dans votre projet, appeler correctement session_register_shutdown () peut garantir que le processus d'écriture de session n'est pas manqué.
Voici un exemple d'utilisation correcte de session_register_shutdown () :
<?php
// Ouvrir session
session_start();
// Fermer automatiquement lorsque le script d'enregistrement se termine session,Assurer que les données sont écrites
session_register_shutdown();
// installation session données
$_SESSION['user'] = 'Zhang San';
// Une autre logique commerciale est omise ici
// Aucun appel manuel requis session_write_close(),Sera exécuté automatiquement
?>
Notes:
Cette fonction ne peut être appelée qu'après que session_start () est appelée.
Il n'est pas recommandé d'appeler session_register_shutdown () et d'appeler manuellement session_write_close () dans le même script pour éviter les conflits.
La façon traditionnelle d'écriture est d'appeler manuellement le développeur après avoir écrit les données de session:
<?php
session_start();
$_SESSION['key'] = 'value';
// Fermer manuellement session,Assurer l'écriture
session_write_close();
?>
Mais si votre script est long ou implique d'écrire des séances à plusieurs endroits, il peut manquer d'écrire. Utilisez session_register_shutdown () , PHP l'appellera automatiquement pour vous à la fin du script.
Assurez-vous que Session_Start () est appelé dans toutes les entrées.
Évitez les demandes simultanées de faire fonctionner la même session ou concevez raisonnablement le mécanisme de verrouillage pendant la concurrence.
N'appelez pas exit () après avoir modifié la session, cela sautera la session en enregistrant à la fin du script.
Utilisez des méthodes de stockage de session stables telles que les bases de données ou Redis.
Ce qui précède est la raison pour laquelle les données de session sont perdues et la bonne façon d'utiliser la fonction Session_Register_Shutdown () . Si vous avez rencontré des problèmes de session, vous pourriez aussi bien essayer cette fonction simple et efficace pour rendre votre session PHP plus stable et sécurisée.
<?php
// Démarrer une session
session_start();
// Rééditez automatiquement lorsque le script d'enregistrement se termine session données
session_register_shutdown();
// 示例installation session valeur
$_SESSION['username'] = 'demoUser';
// Code d'affaires...
?>
Étiquettes associées:
session