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 ?

2voto

MD SHAYON Points 93

Utilisez simplement l'instruction if

 if(!isset($_SESSION)) 
     { 
         session_start(); 
     }

o

vérifier l'état de la session avec session_status qui renvoie l'état actuel de la session et si la session actuelle est déjà en cours de fonctionnement, elle ne renvoie rien d'autre si la session n'est pas en cours de fonctionnement, elle lance la session.

session_status() === PHP_SESSION_ACTIVE ?: session_start();

1voto

MikeCruz13 Points 766

Vous devez avoir déjà appelé le début de la session, qui est peut-être appelée à nouveau par un include ?

if( ! $_SESSION)
{
    session_start();
}

1voto

TrophyGeek Points 908

J'ai rencontré ce problème en essayant de corriger le comportement bloquant de $_SESSION.

http://konrness.com/php5/how-to-prevent-blocking-php-requests/

Le fichier de session reste verrouillé jusqu'à ce que le script se termine ou que la session soit fermée manuellement.

Ainsi, par défaut, une page doit ouvrir une session en mode lecture seule. Mais une fois qu'elle est ouverte en lecture seule, il faut la fermer et la rouvrir pour la faire passer en mode écriture.

const SESSION_DEFAULT_COOKIE_LIFETIME = 86400;

/**
 * Open _SESSION read-only
 */
function OpenSessionReadOnly() {
    session_start([
                      'cookie_lifetime' => SESSION_DEFAULT_COOKIE_LIFETIME,
                      'read_and_close'  => true,    // READ ACCESS FAST
                  ]);
    // $_SESSION is now defined. Call WriteSessionValues() to write out values
}

/**
 * _SESSION is read-only by default. Call this function to save a new value
 * call this function like `WriteSessionValues(["username"=>$login_user]);`
 * to set $_SESSION["username"]
 *
 * @param array $values_assoc_array
 */
function WriteSessionValues($values_assoc_array) {
    // this is required to close the read-only session and 
    // not get a warning on the next line.
    session_abort();

    // now open the session with write access
    session_start([ 'cookie_lifetime' => SESSION_DEFAULT_COOKIE_LIFETIME ]);

    foreach ($values_assoc_array as $key => $value) {
        $_SESSION[ $key ] = $value;
    }
    session_write_close();  // Write session data and end session

    OpenSessionReadOnly(); // now reopen the session in read-only mode.
}

OpenSessionReadOnly();  // start the session for this page

Ensuite, quand vous allez écrire une valeur :

WriteSessionValues(["username"=>$login_user]);

La fonction prend un tableau de paires clé=>valeur pour la rendre encore plus efficace.

0voto

Odinn Points 768
<?php
if ( session_id() != "" ) {
    session_start();
}

En fait, vous devez vérifier si une session a été lancée avant d'en créer une autre ; ... plus de lecture .

D'autre part, vous avez choisi de détruire une session existante avant d'en créer une autre à l'aide de la fonction session_destroy() .

0voto

user2521037 Points 1

Essayez ceci

if(!isset($_SESSION)){ 
    session_start();
}

Je vous suggère d'utiliser ob_start() ; avant de démarrer toute variable de session, ceci devrait ordonner le buffer du navigateur.

edit : Ajouté un ) supplémentaire après $_SESSION

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