En PHP, le traitement du cycle de vie d'une session est une opération courante, en particulier lorsqu'il est nécessaire d'économiser l'état de l'utilisateur ou de partager des données entre plusieurs pages. PHP fournit deux façons de détruire une session: SessionHandler :: destrust () et session_destroy () . Bien que leurs noms soient similaires, il existe des différences clés d'utilisation. Cet article expliquera la différence entre les deux en détail et vous aidera à choisir le moyen le plus approprié de détruire la session.
Session_Destroy () est une fonction intégrée en PHP pour détruire la session en cours. Cette fonction efface toutes les données liées à la session en cours et supprime le tableau $ _Session de la session. Notez que Session_Destroy () marque simplement la session telle qu'elle est détruite, elle ne supprime pas immédiatement toutes les données de la session et n'effacera pas les données avant le chargement de la page suivante.
session_destroy () supprime les enregistrements dans le fichier ou la base de données qui contient des données de session sur le serveur.
Il ne supprime pas les données dans le tableau $ _SESSION . En fait, le tableau de session $ existe toujours après la détruire de la session, mais il ne stocke plus des données valides.
Session_start () doit être appelé pour initialiser la session, sinon session_destroy () ne peut pas être appelée normalement.
<span><span><span class="hljs-title function_ invoke__">session_start</span></span><span>(); </span><span><span class="hljs-comment">// Démarrer une session</span></span><span>
</span><span><span class="hljs-comment">// Définir les variables de session</span></span><span>
</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'user'</span></span><span>] = </span><span><span class="hljs-string">'John Doe'</span></span><span>;
</span><span><span class="hljs-comment">// Détruire la session</span></span><span>
</span><span><span class="hljs-title function_ invoke__">session_destroy</span></span><span>();
</span></span>
SessionHandler :: Destroy () est une méthode utilisée dans un processeur de session personnalisé. Lorsque vous devez contrôler la façon dont la session est stockée (comme dans une base de données, plutôt que le stockage de fichiers par défaut de PHP), vous pouvez implémenter une classe SessionHandler personnalisée. Dans ce cas, SessionHandler :: Destroy () détruit les données de session et déclenche l'opération de nettoyage correspondante.
SessionHandler fait partie de la fonction session_set_save_handler () , qui permet aux développeurs de personnaliser comment les sessions sont stockées. En mettant en œuvre la méthode destrust () dans l'interface SessionHandler , les développeurs peuvent définir des opérations spécifiques pour la destruction de session.
SessionHandler :: Destroy () invoquera une opération de destruction personnalisée pour s'assurer que les données de session sont effacées du système de stockage personnalisé.
Vous devez utiliser session_set_save_handler () pour configurer un processeur de session personnalisé.
Son objectif est de détruire toutes les données liées à l'ID de session, généralement dans une base de données ou un autre support de stockage.
<span><span><span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span> </span><span><span class="hljs-title">MySessionHandler</span></span><span> </span><span><span class="hljs-keyword">extends</span></span><span> </span><span><span class="hljs-title">SessionHandler</span></span><span> {
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">destroy</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$session_id</span></span></span><span>) {
</span><span><span class="hljs-comment">// 自定义Détruire la session数据的操作,Par exemple, supprimer de la base de données</span></span><span>
</span><span><span class="hljs-comment">// Par exemple:Supprimer les enregistrements de session dans la base de données</span></span><span>
</span><span><span class="hljs-variable">$db</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"user"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"database"</span></span><span>);
</span><span><span class="hljs-variable">$db</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"DELETE FROM sessions WHERE session_id = '<span class="hljs-subst">$session_id</span></span></span><span>'");
</span><span><span class="hljs-comment">// 调用父类的方法以Détruire la session</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-built_in">parent</span></span><span>::</span><span><span class="hljs-title function_ invoke__">destroy</span></span><span>(</span><span><span class="hljs-variable">$session_id</span></span><span>);
}
}
</span><span><span class="hljs-comment">// Configuration d'un processeur de session personnalisé</span></span><span>
</span><span><span class="hljs-title function_ invoke__">session_set_save_handler</span></span><span>(</span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">MySessionHandler</span></span><span>(), </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">session_start</span></span><span>(); </span><span><span class="hljs-comment">// Démarrer une session</span></span><span>
</span><span><span class="hljs-comment">// Définir les données de session</span></span><span>
</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'user'</span></span><span>] = </span><span><span class="hljs-string">'Jane Doe'</span></span><span>;
</span><span><span class="hljs-comment">// Détruire la session</span></span><span>
</span><span><span class="hljs-title function_ invoke__">session_destroy</span></span><span>();
</span></span>
Utilisez des scénarios :
Session_Destroy () est une fonction intégrée pour PHP, adaptée à la destruction normale de session, en particulier lorsque le stockage de session personnalisé n'est pas utilisé.
SessionHandler :: Destroy () convient aux scénarios où le stockage de session personnalisé est utilisé, et il permet aux développeurs de détruire les sessions en implémentant la logique de traitement de session personnalisée.
Plage d'exploitation :
Session_Destroy () ne détruit que les données de session, mais ne supprime pas les données dans le tableau $ _Session . Cela signifie que les données de la session restent dans la demande actuelle jusqu'à ce que la page soit actualisée.
SessionHandler :: Destroy () détruit complètement les données de session, et généralement lorsque la méthode est appelée, les données sont supprimées du stockage personnalisé.
Flexibilité :
Session_Destroy () est un moyen relativement simple de s'appliquer à la plupart des cas.
SessionHandler :: Destroy () offre une plus grande flexibilité et évolutivité, adaptée aux scénarios d'application complexes qui nécessitent des opérations de stockage et de destruction personnalisées.
Si vous utilisez le mécanisme de stockage de session par défaut de PHP (tel que le stockage de fichiers) et que vous devez seulement détruire la session en cours, l'utilisation de session_destroy () est la manière la plus simple et la plus directe.
Si vous utilisez un stockage de session personnalisé (comme stocké dans une base de données) et que vous souhaitez un contrôle complet sur la façon dont les sessions sont détruites, SessionHandler :: Destroy () est plus appropriée.
Dans l'ensemble, Session_Destroy () convient à la plupart des scénarios d'application conventionnels, tandis que SessionHandler :: Destroy () convient plus aux situations où une personnalisation élevée est requise. La méthode à choisir dépend de la façon dont vous stockez les données de session et de sa gestion du cycle de vie.