Dans mon PHP code), si une session a déjà commencé et que j'essaie d'en démarrer une nouvelle, je reçois l'avis suivant:
Remarque: une session a déjà été démarrée - ignorer session_start ()
Comment puis-je éviter ça?
Essayer
<?php
if(!isset($_SESSION))
{
session_start();
}
?>
Si vous en voulez un nouveau, faites alors 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();
}
Je voudrais éviter de vérifier le global $_SESSION
À la place de J'appelle la méthode session_status()
depuis PHP a explicitement implémenté cette fonction pour:
Exposer le statut de la session via une nouvelle fonction, statut_session Ceci est pour (PHP> = 5.4.0)
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.
Oui, vous pouvez détecter si la session est déjà en cours en vérifiant isset($_SESSION)
. Cependant, la meilleure solution consiste simplement à ne pas appeler session_start()
plus d'une fois.
Il doit être appelé très tôt dans votre script, éventuellement même à la première ligne, puis ne plus être appelé.
Si vous l'avez à plus d'un endroit dans votre code, vous demandez alors d'obtenir ce type de bogue. Coupez-le afin qu'il ne soit qu'à un endroit et ne puisse être appelé qu'une seule fois.
Vous devez déjà appeler le début de la session peut-être être appelé à nouveau via un include?
if( ! $_SESSION)
{
session_start();
}
Ce serait plus efficace:
@session_start();
Eviter le gestionnaire d'erreurs à l'écran
Meilleur,
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'à la fin du script ou la fermeture manuelle de la session.
Ainsi, par défaut, une page doit ouvrir une session en mode lecture seule. Mais une fois ouvert en lecture seule, il doit être fermé et rouvert en é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]);
Aucune de ces réponses ne convenait, sans appeler session_start () dans tous les fichiers php dépendant de variables de session, ils ne seront pas inclus. La notice est tellement ennuyeuse et remplit rapidement le Error_log. La seule solution que je peux trouver qui fonctionne est la suivante ...
error_reporting(E_ALL ^ E_NOTICE);
session_start();
Une mauvaise solution, mais ça marche.
essaye ça
if(!isset($_SESSION)){
session_start();
}
Je vous suggère d'utiliser ob_start (); avant de commencer toute variable de session, cela devrait commander la mémoire tampon de votre navigateur.
edit: ajouté un extra) après $ _SESSION
<?php
if ( session_id() != "" ) {
session_start();
}
En gros, vous devez vérifier si une session a été démarré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 en utilisant session_destroy()
.