¿Cómo solucionar el problema obsoleto session_register ()?

Cómo solucionar el problema desaprobado session_register() en PHP 5.3

No lo uses La descripción dice:

Registre una o más variables globales con la sesión actual.

Dos cosas que se me vinieron a la mente:

  1. El uso de variables globales no es bueno de todos modos, encuentra una forma de evitarlos.
  2. Aún puede establecer variables con $_SESSION['var'] = "value" .

Ver también las advertencias del manual :

Si desea que su secuencia de comandos funcione independientemente de register_globals , en su lugar debe usar la matriz $_SESSION entradas $_SESSION se registran automáticamente. Si su script usa session_register() , no funcionará en entornos donde la directiva PHP register_globals está deshabilitada.

Esto es muy importante, porque la directiva register_globals está establecida en False de forma predeterminada.

Promover:

Esto registra una variable global . Si desea registrar una variable de sesión desde dentro de una función , debe asegurarse de hacerlo global utilizando la palabra clave global o la $GLOBALS[] , o use las matrices de sesión especiales como se indica a continuación.

y

Si está utilizando $_SESSION (o $HTTP_SESSION_VARS ), no use session_register() , session_is_registered() y session_unregister() .

Use $_SESSION directamente para establecer las variables. Me gusta esto:

 $_SESSION['name'] = 'stack'; 

En lugar de:

 $name = 'stack'; session_register("name"); 

Leer más aquí

antes de PHP 5.3

 session_register("name"); 

desde PHP 5.3

 $_SESSION['name'] = $name; 

si necesita una función de respaldo puede usar esto

 function session_register($name){ global $$name; $_SESSION[$name] = $$name; $$name = &$_SESSION[$name]; } 

Para complementar la respuesta de Felix Kling , estaba estudiando una base de código que solía tener el siguiente código:

 if (is_array($start_vars)) { foreach ($start_vars as $var) { session_register($var); } } else if (!(empty($start_vars))) { session_register($start_vars); } 

Para no usar session_register hicieron los siguientes ajustes:

 if (is_array($start_vars)) { foreach ($start_vars as $var) { $_SESSION[$var] = $GLOBALS[$var]; } } else if (!(empty($start_vars))) { $_SESSION[$start_vars] = $GLOBALS[$start_vars]; } 

Solo tenemos que usar @ frente a la función obsoleta. No es necesario cambiar nada como se menciona en las publicaciones anteriores. Por ejemplo: if(!@session_is_registered("username")){ } . Simplemente ponga @ y el problema está resuelto.