La gestion de session est un élément très important de la création d'applications Web à l'aide de PHP. Surtout en ce qui concerne l'utilisation des deux fonctions session_register_shutdown () et session_start () , de nombreux développeurs confondent souvent leur ordre d'appel, entraînant les données de session qui n'étaient pas correctement enregistrées ou tout autre comportement imprévisible. Cet article explorera en profondeur le rôle de ces deux fonctions, la synchronisation des appels et comment organiser correctement le code pour assurer le fonctionnement stable de la fonction de session.
Session_start () est une fonction utilisée pour démarrer une session. Il lira le fichier de session qui existe déjà sur le serveur et chargera les données dans le tableau hyperglobal $ _Session . S'il n'y a pas de fichier de session correspondant, il crée un nouvel ID de session et initialise une session vide.
Exemple:
session_start();
$_SESSION['user'] = 'Alice';
Session_register_shutdown () est une fonction fournie par PHP pour enregistrer un crochet de radiation de session, qui garantit que les données de session sont automatiquement enregistrées avant la fin du script. Ceci est utile pour les scénarios où les données de session doivent être écrites à la dernière minute du cycle de vie du script.
Cette fonction ne nécessite généralement pas d'appel manuel, car Session_Start () le enregistre automatiquement. Cependant, il est particulièrement important de le comprendre et de l'appeler manuellement si vous utilisez un processeur de session personnalisé, ou avez un contrôle personnalisé sur le cycle de vie de la session dans certains cadres spéciaux.
La règle la plus importante est: session_start () doit être appelée avant que toutes les lectures ou les écritures sur les données de session, et doivent être appelées avant que Session_register_Shutdown () ne soit enregistrée (si vous choisissez de vous inscrire manuellement) .
Exemple d'erreur (ne fera pas que les données de session ne soient pas enregistrées correctement):
session_register_shutdown();
session_start(); // ? Ordre d'appel incorrect
Exemple correct:
session_start();
session_register_shutdown(); // ? Ordre d'appel correct(Si vous devez vous inscrire manuellement)
Dans la plupart des scénarios, appelez simplement session_start () , car PHP gérera automatiquement le crochet d'arrêt d'enregistrement. Mais dans des scripts complexes, par exemple, vous avez un mécanisme de sauvegarde de session personnalisé:
session_set_save_handler(
[$handler, 'open'],
[$handler, 'close'],
[$handler, 'read'],
[$handler, 'write'],
[$handler, 'destroy'],
[$handler, 'gc']
);
session_start();
session_register_shutdown(); // Appel explicite,s'assurer session Écrivez à la fin du script
Session_start () doit être appelé avant toute sortie (comme Echo ou HTML), sinon une erreur de "Impossible d'envoyer des en-têtes de cookie - déjà envoyés" apparaîtra. Assurez-vous qu'il n'y a pas de sortie de contenu ou d'espace avant.
Si le cookie est désactivé, PHP ajoute le paramètre PHPSESSID à l'URL. Bien qu'il ne soit pas recommandé, il est toujours utilisé par quelqu'un dans certains cas, comme:
$url = "https://m66.net/dashboard.php?" . SID;
echo "<a href=\"$url\">Panneau de contrôle</a>";
Où SID est une constante fournie par PHP, qui est utilisée pour ajouter automatiquement l'ID de session dans l'URL. Notez que si le cookie est activé, le SID est une chaîne vide.
Appelez toujours session_start () devant le script.
Si vous utilisez un mécanisme de sauvegarde de session personnalisé, vous pouvez appeler explicitement session_register_shutdown () , mais l'ordre doit être après session_start () .
Évitez de sortir du contenu avant session_start () .
L'utilisation d'URL pour passer les ID de session présente des risques de sécurité, alors essayez d'utiliser des cookies.
La gestion correcte des sessions aide non seulement à améliorer la stabilité du programme, mais aussi à améliorer la sécurité et l'expérience utilisateur. J'espère que cet article peut vous aider à mieux comprendre comment ces deux fonctions sont utilisées.