Dans le développement de PHP, la gestion des séances (session) est une exigence très courante. Habituellement, nous commençons la session via la fonction session_start () , mais si session_start () est appelée à plusieurs reprises, elle provoquera une erreur ou un avertissement "en-têtes déjà envoyés". Par conséquent, c'est une très bonne habitude de programmation pour déterminer si la session en cours est activée avant de commencer la session.
La fonction session_status () fournie avec PHP peut être utilisée pour déterminer l'état de la session en cours pour éviter les startups répétées. Cet article introduira en détail comment utiliser la fonction session_status () pour déterminer l'état de la session et comment éviter le début répété de la session.
Session_status () est une fonction introduite après PHP 5.4.0 pour obtenir l'état de la session en cours. Il renvoie l'un des trois états suivants:
Php_session_disabled (valeur entière 0): indique que la fonction de session est désactivée.
Php_session_none (valeur entière 1): signifie que la session n'est pas activée, mais peut être activée.
Php_session_active (valeur entière 2): indique que la session a été ouverte.
Avec ces valeurs de retour, nous pouvons déterminer en toute sécurité si session_start () doit être appelée.
Les exemples de code de base pour éviter les startups répétées sont les suivantes:
<?php
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
// Logique de code suivante
?>
Ici, session_start () n'est appelée que lorsque la session n'est pas encore ouverte, évitant ainsi les erreurs causées par des startups répétées.
Voici un exemple typique qui montre comment juger et démarrer une session à l'aide de session_status () :
<?php
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
// Définir les variables de session
$_SESSION['user'] = 'Zhang San';
// Variables de session d'accès
echo 'L'utilisateur actuel est:' . $_SESSION['user'];
?>
Dans ce code, Session_Start () ne sera exécuté qu'une seule fois, garantissant que la session est sûre et stable, peu importe combien de fois le code est inclus ou exécuté.
Dans les grands projets, plusieurs fichiers ou classes peuvent essayer de démarrer une session, et il est important d'utiliser session_status () pour éviter les appels répétés.
Lorsque vous utilisez des cadres ou des bibliothèques tierces, il n'est pas sûr de savoir si la couche sous-jacente a commencé la session et juge le statut pour éviter les conflits.
Lors de la rédaction d'outils généraux ou de fonctions de bibliothèque, assurez la robustesse du code.
La fonction session_status () n'est disponible qu'en PHP 5.4.0 et supérieur.
Il ne peut y avoir de sortie avant d'appeler session_start () , sinon l'erreur "en-têtes déjà envoyée" apparaîtra toujours.
Si le serveur a une session désactivée ( session_status () === PHP_SESSION_DISABLEAD ), la fonction de session ne peut pas être utilisée.
Parfois, l'URL cible que l'utilisateur saute dans la session sera enregistrée, comme:
<?php
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
$_SESSION['redirect_url'] = 'https://gitbox.net/path/to/page';
// Traitement de saut ultérieur
header('Location: ' . $_SESSION['redirect_url']);
exit;
?>
Dans l'exemple ci-dessus, la partie du nom de domaine de l'URL est directement remplacée par Gitbox.net , ce qui est pratique pour la démonstration et l'explication.
En utilisant des session_status () rationnellement, il peut efficacement éviter le début répété des sessions, améliorant la robustesse du code et de l'expérience utilisateur.