Sesiones PHP que ya se han iniciado

En mi código PHP, si una sesión ya ha comenzado y trato de iniciar una nueva, recibo el siguiente Aviso:

Aviso: ya se inició una sesión, ignorando session_start ()

¿Cómo puedo evitar esto?

Tratar

 

Si quiere uno nuevo, realice session_destroy() antes de iniciarlo. Para verificar si está configurado antes de iniciarlo, llame a 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(); } 

$_SESSION comprobar $_SESSION global en lugar de llamar al método session_status() ya que PHP implementó esta función explícitamente para:

Exponer el estado de la sesión a través de una nueva función, session_status Esto es para (PHP> = 5.4.0)

Solo si quieres destruir la sesión anterior:

  

o puedes usar

 unset($_SESSION['variable_session _data']) 

para destruir una variable de sesión particular.

Sí, puede detectar si la sesión ya se está ejecutando al marcar isset($_SESSION) . Sin embargo, la mejor respuesta es simplemente no llamar a session_start() más de una vez.

Debería llamarse muy temprano en su script, posiblemente incluso en la primera línea, y luego no volver a llamar.

Si lo tiene en más de un lugar en su código, entonces está pidiendo que obtenga este tipo de error. Córtalo para que esté solo en un lugar y solo se puede llamar una vez.

¿Debe haber llamado ya desde el inicio de la sesión para que lo llamen de nuevo a través de una inclusión?

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

prueba esto

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

Te sugiero que uses ob_start (); antes de comenzar cualquier sesson variar, esto debería ordenar el buffer del navegador.

editar: se agregó un extra) después de $ _SESSION

Ninguno de los anteriores era adecuado, sin llamar a session_start () en todos los archivos php que dependen de las variables $ Session, no se incluirán. El Aviso es tan molesto y llena rápidamente el Error_log. La única solución que puedo encontrar que funciona es esta …

  error_reporting(E_ALL ^ E_NOTICE); session_start(); 

Una mala solución, pero funciona.

Me encontré con este problema al intentar corregir el comportamiento de locking de $ _SESSION.

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

El archivo de sesión permanece bloqueado hasta que la secuencia de comandos finaliza o la sesión se cierra manualmente.

Por lo tanto, de forma predeterminada, una página debe abrir una sesión en modo de solo lectura. Pero una vez que está abierto en solo lectura, tiene que ser cerrado y reabierto en modo de escritura.

 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 

Luego, cuando vayas a escribir algún valor:

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

Sería más eficiente:

 @session_start(); 

Evitar el controlador de errores en la pantalla

Mejor,

  

Básicamente, debe verificar si se inició una sesión antes de crear otra; ... más lectura .

Por otro lado, elegiste destruir una sesión existente antes de crear otra usando session_destroy() .

reemplazar session_start (); a

 if(!isset($a)) { $a = False; if($a == TRUE) { session_start(); $a=TRUE; } }