2012-04-10 18 views

Respuesta

35

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.

+0

gracias por mencionar una solución para php <5.4 – Houston

+0

@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

7

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(); 
1
if (session_id() === "") { session_start(); } 
3

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(); 
+0

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. –

0

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(); 
     } 
    }