22 Votos

PHP: Comprobar si una Sesión ya existe - Evitar el Error "A session had already been started"

Pregunta de Invitado | 06/03/2023 a las 20:03

Trabajo con sesiones en uno de mis scripts PHP. Desafortunadamente, de vez en cuando sucede que aparentemente ya existe una sesión de PHP, después de revocar session_start(). Esto da como resultado el siguiente mensaje de error (Ya se había iniciado una sesión):

Notice: A session had already been started - ignoring session_start()

¿Cómo puedo evitar este mensaje de error y verificar si ya existe una sesión y llamar a session_start() en consecuencia solo si aún no hay una sesión?

ResponderPositivoNegativoFechaVotos
11 Voto

Puede comprobar fácilmente con isset() si ya hay una sesión o, en su caso, si no hay ninguna sesión abierta.

Puede hacerlo de la siguiente manera:

if (!isset($_SESSION)) {
  // aún no se ha iniciado ninguna sesión
  session_start();
}

Sin embargo, la mejor solución sería (re)estructurar su código para que session_start() se invoque de manera confiable solo una vez, por ejemplo, solo cada vez que inicie su script. Con un buen diseño de código, no debería ocurrir ninguna llamada múltiple a session_start().
07/03/2023 a las 11:12

ResponderPositivo Negativo
11 Voto

También puede usar la función de PHP session_status() para verificar si actualmente hay una sesión.

Si una sesión está abierta, obtendrá PHP_SESSION_ACTIVE de session_status(). Entonces puede escribir:

if (session_status() !== PHP_SESSION_ACTIVE) {
  session_start();
}

Esto verifica si session_status() no es igual a PHP_SESSION_ACTIVE (= una sesión está activa) y luego inicia una nueva sesión.

Otros valores de retorno de session_status() son:

  • PHP_SESSION_DISABLED: Las sesiones están deshabilitadas.
  • PHP_SESSION_NONE: Las sesiones están habilitadas, pero no existe ninguna sesión.
  • PHP_SESSION_ACTIVE: Las sesiones están habilitadas y existe una sesión.

Más sobre eso aquí en el Manual PHP.
09/03/2023 a las 17:09

ResponderPositivo Negativo
Responder

Temas Relacionados

SQLite: Examinar si existe una Tabla

Información | 0 Comentarios

Aviso Importante

Por favor tenga en cuenta: Las contribuciones publicadas en askingbox.com son contribuciones de los usuarios y no deben reemplazar el asesoramiento profesional. No son verificados por independientes y no reflejan necesariamente la opinión de askingbox.com. Aprende más.

Participar

Haga su propia pregunta o escriba su propio artículo en askingbox.com. He aquí cómo.