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 ?
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 ?
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();
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.
<?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()
.
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.