Position actuelle: Accueil> Derniers articles> SessionHandler :: Create_sid Retour Valuver Analysis and Debogging Techniques

SessionHandler :: Create_sid Retour Valuver Analysis and Debogging Techniques

gitbox 2025-06-07

Dans PHP, lors de la personnalisation du mécanisme de traitement de session, nous pouvons personnaliser la logique de stockage de session en implémentant la SessionHandlerInterface ou en héritage de la classe SessionHandler . Parmi eux, SessionHandler :: Create_Sid () est une méthode réécortée utilisée pour générer un ID de session. Comprendre la valeur de retour de cette méthode et son objectif est particulièrement important pour déboguer les mécanismes de session complexes.

1. Que fait SessionHandler :: create_sid () ?

create_sid () est appelé automatiquement lorsque session_start () est appelé et qu'il n'y a actuellement aucun ID de session valide. Son objectif est de renvoyer une nouvelle chaîne d'identification de session unique. L'implémentation par défaut est basée sur session.sid_length et session.sid_bits_per_character pour générer des ID d'entropie élevés, mais vous pouvez également personnaliser la logique pour contrôler comment les ID de session sont générés.

 class MySessionHandler extends SessionHandler {
    public function create_sid(): string {
        return hash('sha256', random_bytes(32));
    }
}

session_set_save_handler(new MySessionHandler(), true);
session_start();

Dans le code ci-dessus, nous avons des données aléatoires de 32 octets utilisant SHA-256 pour générer un ID de session unique, et la valeur renvoyée est similaire:

 82c4ad45fef0c9f0ed72cd3e78c0f5e5c7e35a8f70e94dfd6a5f1a15f2b19e73

2. Quelles exigences la valeur de retour devrait-elle satisfaire?

La chaîne renvoyée par create_sid () doit répondre aux points suivants:

  1. Unicité : il ne doit pas être répété dans une certaine plage de temps.

  2. Imprévisible : vous ne pouvez pas facilement deviner et empêcher le détournement de session.

  3. Compatible avec session.use_strict_mode = 1 : Lorsque le mode strict est activé, si l'ID de session retourné existe déjà en stockage, il sera nié et régénéré.

Le non-respect des conditions ci-dessus peut entraîner des conflits de session ou des vulnérabilités de sécurité.

3. Conseils pour déboguer la valeur de retour de create_sid ()

La façon la plus directe de déboguer create_sid () consiste à ajouter temporairement les informations de journalisation et de suivi:

1. Utilisez la journalisation pour générer un identifiant de session

 public function create_sid(): string {
    $sid = hash('sha256', random_bytes(32));
    error_log("Créer une nouvelle session ID: $sid");
    return $sid;
}

Cela écrira chaque SID généré dans le journal d'erreur PHP, le chemin est généralement /var/log/php_errors.log ou configuré via php.ini .

2. Utilisez l'outil de débogage du navigateur pour afficher l'en-tête Set-Cookie

Utilisez des outils de développeur (tels que la balise réseau de Chrome) dans votre navigateur pour afficher l'en-tête de réponse Set-Cookie dans la demande, et confirmer si l'ID de session renvoyé par le serveur est le contenu que vous attendez de générer.

Par exemple, le retour à l'en-tête peut ressembler à ceci:

 Set-Cookie: PHPSESSID=82c4ad45fef0c9f0ed72cd3e78c0f5e5c7e35a8f70e94dfd6a5f1a15f2b19e73; path=/; HttpOnly

3. Vérifiez si la session a été créée avec succès

Vérifiez si les données de session avec cet ID sont réellement enregistrées dans le backend de stockage (telles que redis, système de fichiers, base de données). Par exemple, si vous enregistrez la session sur Redis:

 $sessionKey = "PHPREDIS_SESSION:sess_$sid";

Vous pouvez utiliser la commande:

 GET PHPREDIS_SESSION:sess_82c4ad45fef0c9f0ed72cd3e78c0f5e5c7e35a8f70e94dfd6a5f1a15f2b19e73

Pour vérifier si la clé de session existe.

4. Sortie de la page de débogage encapsulé

Une page de débogage peut être créée temporairement pour afficher l'ID de session et l'état actuels:

 session_start();
echo "<pre>actuel Session ID: " . session_id() . "</pre>";
echo "<pre>Session contenu: ";
print_r($_SESSION);
echo "</pre>";

La sortie après avoir accédé à la page est similaire:

 actuel Session ID: 82c4ad45fef0c9f0ed72cd3e78c0f5e5c7e35a8f70e94dfd6a5f1a15f2b19e73
Session contenu: Array
(
)

5. Utiliser l'URL pour transporter l'ID de session (pour le débogage uniquement)

Si le client ne prend pas en charge les cookies, vous pouvez attacher l'ID de session à l'URL pour déboguer:

 https://gitbox.net/debug.php?PHPSESSID=82c4ad45fef0c9f0ed72cd3e78c0f5e5c7e35a8f70e94dfd6a5f1a15f2b19e73

Mais note : cette méthode ne convient qu'au débogage de l'environnement de développement. L'environnement de production désactive les URL pour transporter des ID de session pour éviter les fuites de session.

4. Suggestions supplémentaires lors du débogage

  • Activer session.use_strict_mode = 1 pour forcer PHP à rejeter les SIDS existants.

  • Configurez session.save_path vers un répertoire facile à lire et à écrire pour faciliter la visualisation du fichier de session d'origine.

  • Ouvrez temporairement les rapports d'erreur de niveau supérieur et la journalisation dans php.ini ou .htaccess .

 error_reporting = E_ALL
display_errors = On
log_errors = On
error_log = /tmp/php_error.log