92 votes

Les sessions PHP qui ont déjà été lancées

Dans mon code PHP, si une session a déjà commencé, et que j'essaie d'en lancer une nouvelle, j'obtiens l'avis suivant :

Avis : Une session avait déjà été lancée - ignorer session_start()

Comment puis-je éviter cela ?

287voto

Valeriy Gorbatikov Points 753

Essayez

<?php
    if(!isset($_SESSION)) 
    { 
        session_start(); 
    } 
?>

35voto

Si vous en voulez un nouveau, alors faites session_destroy() avant de le démarrer. Pour vérifier si elle est définie avant de la démarrer, appelez session_status() :

$status = session_status();
if($status == PHP_SESSION_NONE){
    //There is no active session
    session_start();
}else
if($status == PHP_SESSION_DISABLED){
    //Sessions are not available
}else
if($status == PHP_SESSION_ACTIVE){
    //Destroy current and start new one
    session_destroy();
    session_start();
}

J'éviterais de vérifier les données globales $_SESSION au lieu de de J'appelle le session_status() puisque PHP a implémenté cette fonction explicitement pour :

Exposer l'état de la session via une nouvelle fonction, session_status Ceci est pour (PHP >=5.4.0)

5voto

jolly.exe Points 1020

Seulement si vous voulez détruire la session précédente :

<?php
    if(!isset($_SESSION)) 
    { 
        session_start(); 
    }
    else
    {
        session_destroy();
        session_start(); 
    }
?>

ou vous pouvez utiliser

unset($_SESSION['variable_session _data'])

pour détruire une variable de session particulière.

4voto

Crabthug Points 41
session_status() === PHP_SESSION_ACTIVE ?: session_start();

Jeu fermé

2voto

Spudley Points 85371

Oui, vous pouvez détecter si la session est déjà en cours d'exécution en vérifiant les éléments suivants isset($_SESSION) . Cependant, la meilleure réponse est tout simplement de ne pas appeler session_start() plus d'une fois.

Il devrait être appelé très tôt dans votre script, peut-être même la première ligne, et ensuite ne plus être appelé.

Si vous l'avez à plusieurs endroits dans votre code, vous risquez d'obtenir ce type de bogue. Réduisez-le pour qu'il ne se trouve qu'à un seul endroit et ne puisse être appelé qu'une seule fois.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X