¿Hay algún truco de código corto para verificar si una sesión ha comenzado y si no, cargue una? Actualmente recibo una "sesión de error ya iniciada ..." si pongo el inicio de una sesión independientemente de la comprobación.¿Cargar session_start() solo si la sesión no existe?
Respuesta
isset
es generalmente la forma correcta para comprobar si las variables predefinidas se definen actualmente:
Si está utilizando una versión de PHP anteriores a 5.4,
por lo general puede salirse con la suya y su tentadora solo haciendo el código a continuación, pero tenga en cuenta que si por alguna razón las sesiones están deshabilitadas, se llamará session_start(), lo que podría terminar en errores y depuración innecesaria, ya que no se permite crear la matriz $ _SESSION.
if(!isset($_SESSION)){session_start();}
si se quiere dar cuenta de la comprobación para ver si las sesiones están desactivados por alguna razón, se puede suprimir el mensaje de error, establezca una variable de sesión de prueba, y luego verificar su creación. Si no es así, puede codificar en una reacción para sesiones deshabilitadas. Querrá hacer todo esto al inicio o cerca del inicio de su script. Así como un ejemplo (funciona de forma diferente dependiendo del ajuste de control de errores):
if(!isset($_SESSION)){session_start();}
$_SESSION['valid'] = 'valid';
if($_SESSION['valid'] != 'valid')
{
//handle disabled sessions
}
Sin embargo, si está usando PHP versión 5.4 o superior,
Usted puede utilizar la función de session_status(), una mejor opción como da cuenta de sesiones que están deshabilitadas y comprueba si ya existe una sesión.
if (session_status() === PHP_SESSION_NONE){session_start();}
NOTA de que PHP_SESSION_NONE es un conjunto constante por PHP y por lo tanto no necesita ser envuelto entre comillas. Se evalúa como entero 1, pero como es una constante que se estableció específicamente para eliminar la necesidad de números mágicos, es mejor probar contra la constante.
Mucha gente simplemente usa @session_start()
para suprimir la advertencia de que la sesión ya se ha iniciado. La alternativa es por lo general:
if (session_status() === PHP_SESSION_NONE) session_start();
if (session_id() === "") { session_start(); }
tratar esta condición
if (version_compare(phpversion(), '5.4.0', '<')) {
if(session_id() == '') {
session_start();
} }else{
if (session_status() == PHP_SESSION_NONE) {
session_start();
} }
Si sólo se quiere evitar el error, utilice @ antes de la función ejemplo :
@session_start();
Hola, bienvenidos a SO. ¿Podría editar su publicación para explicar qué hace su código y cómo resuelve el problema del OP? Se desaconsejan las respuestas de solo código y están sujetas a eliminación. –
Comprobación para sesión existente antes de comenzar nuevo:
// # if phpversion() is >= 5.4
if(phpversion() >= 5.4) {
// # check session_status() function for value 'PHP_SESSION_NONE'
if(session_status() === PHP_SESSION_NONE) {
session_start();
}
} else { // # maintain backwards compat. with PHP versions older than 5.4
// # if $_SESSION object if NOT set, start a new session!
if(!isset($_SESSION)) {
session_start();
}
}
- 1. Si la sesión existe o no
- 2. Comprueba si hay una sesión sin usar session_start()
- 3. Crear un archivo solo si no existe
- 4. ¿Cómo verificar si la sesión existe o no?
- 5. Comprobar si existe sesión JSF
- 6. Advertencia: session_start() failed: No existe el fichero o directorio
- 7. PHP session_start()
- 8. Codeigniter y verificación de PHP si existe sesión
- 9. Gran número de Session_Start con la misma ID de sesión
- 10. Verifica si la sesión está configurada o no, y si no creas una?
- 11. ¿Por qué session_start es necesario cuando se usa la sesión?
- 12. session_start parece ser muy lento (pero solo algunas veces)
- 13. Detectar si existe sesión de PHP
- 14. PHP session_start está colgando
- 15. HttpHandler se activa solo si el archivo no existe
- 16. Reescribir ruta solo si el archivo/carpeta no existe
- 17. Crear tabla en SQLite solo si ya no existe
- 18. ¿Cómo crear un archivo solo si no existe?
- 19. Importar un módulo en Python solo si no existe
- 20. MongoDB: documento $ addToSet/$ push solo si no existe
- 21. Crear una tabla SQLite solo si no existe
- 22. ¿Cuándo debo declarar session_start() ;?
- 23. ¿Cómo verifico si se ha ingresado session_start?
- 24. Crear si no existe
- 25. Array.push() si no existe?
- 26. No existe el fichero a cargar - Rack
- 27. Prueba si se inicia la sesión
- 28. PHP session_start falla
- 29. Prevenir php session_start() para enviar una cookie
- 30. Django create userprofile si no existe
gracias por mencionar una solución para php <5.4 – Houston
@nick bien, yo diría que usted o bien encontró un error en 5.4.16 o más probablemente tenga una configuración extraña de php/server. De cualquier manera, es bueno proteger sus casos extremos: D – Rooster