En mi código PHP, si una sesión ya ha comenzado e intento iniciar una nueva, recibo el siguiente Aviso:
Aviso: ya se había iniciado una sesión, ignorando session_start ()
¿Cómo puedo evitar esto?
En mi código PHP, si una sesión ya ha comenzado e intento iniciar una nueva, recibo el siguiente Aviso:
Aviso: ya se había iniciado una sesión, ignorando session_start ()
¿Cómo puedo evitar esto?
session_start()
en una de mis inclusiones y require_once
en cada archivo que necesito.
Respuestas:
Tratar
<?php
if(!isset($_SESSION))
{
session_start();
}
?>
Si desea uno nuevo, hágalo session_destroy()
antes de iniciarlo. Para comprobar 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();
}
Evitaría verificar el global en $_SESSION
lugar de llamar al session_status()
método ya que PHP implementó esta función explícitamente para:
Exponer el estado de la sesión a través de la nueva función, session_status Esto es para (PHP> = 5.4.0)
Solo si desea destruir la sesión anterior:
<?php
if(!isset($_SESSION))
{
session_start();
}
else
{
session_destroy();
session_start();
}
?>
o puedes usar
unset($_SESSION['variable_session _data'])
para destruir una variable de sesión en particular.
Sí, puede detectar si la sesión ya se está ejecutando comprobando isset($_SESSION)
. Sin embargo, la mejor respuesta es simplemente no llamar 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 llamarlo.
Si lo tiene en más de un lugar en su código, entonces está solicitando este tipo de error. Córtelo para que esté solo en un lugar y solo se pueda llamar una vez.
¿Ya debe haber llamado al inicio de la sesión, tal vez sea llamado nuevamente a través de una inclusión?
if( ! $_SESSION)
{
session_start();
}
Notice: Undefined variable: _SESSION
. Úselo en su isset
lugar.
Encontré este problema al intentar corregir el comportamiento de bloqueo de $ _SESSION.
http://konrness.com/php5/how-to-prevent-blocking-php-requests/
El archivo de sesión permanece bloqueado hasta que se completa el script o la sesión se cierra manualmente.
Entonces, de forma predeterminada, una página debería abrir una sesión en modo de solo lectura. Pero una vez que está abierto en modo de solo lectura, debe cerrarse y volver a abrirse para ponerlo 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]);
La función toma una matriz de pares clave => valor para hacerla aún más eficiente.
prueba esto
if(!isset($_SESSION)){
session_start();
}
Le sugiero que utilice ob_start (); antes de iniciar cualquier variable de sesson, esto debería ordenar el búfer de su navegador.
editar: Se agregó un extra) después de $ _SESSION
Nada de lo anterior fue 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.
<?php
if ( session_id() != "" ) {
session_start();
}
Básicamente, debe verificar si se inició una sesión antes de crear otra; ... más lectura .
Por otro lado, eligió destruir una sesión existente antes de crear otra usando session_destroy()
.
Simplemente use la declaración if
if(!isset($_SESSION))
{
session_start();
}
o
verifique el estado de la sesión con session_status que devuelve el estado de la sesión actual y si la sesión actual ya está funcionando, regrese sin nada más si la sesión no funciona inicie la sesión
session_status() === PHP_SESSION_ACTIVE ?: session_start();