Foros del Web » Programando para Internet » PHP »

Manejo de sesiones sin register_globals

Estas en el tema de Manejo de sesiones sin register_globals en el foro de PHP en Foros del Web. Qué tal, hace poco me dí cuenta de que no es recomendable manejar el inicio de sesiones con la variable register_globals=On en el archivo de ...
  #1 (permalink)  
Antiguo 12/04/2005, 16:31
Avatar de Gabriel0702  
Fecha de Ingreso: febrero-2005
Mensajes: 155
Antigüedad: 19 años
Puntos: 0
Exclamación Manejo de sesiones sin register_globals

Qué tal, hace poco me dí cuenta de que no es recomendable manejar el inicio de sesiones con la variable register_globals=On en el archivo de configuración php.ini. La cuestión es que me dí cuenta después de tener casi todo el sitio de desarrollo completo. Ahora tengo dudas de como convertir el acceso tomando en cuenta que se tiene register_globals=On, para tenerlo con register_globals=Off. A continuación pongo el código de ejemplo de la página de inicio de sesión, me gustaría que me pusieran el mismo código, pero que funcione con register_globals=off

Código
Código PHP:
//
session_start();

$loginFormAction $_SERVER['PHP_SELF'];
if (isset(
$accesscheck)) {
  
$GLOBALS['PrevUrl'] = $accesscheck;
  
session_register('PrevUrl');
}

    
$loginStrGroup  mysql_result($LoginRS,0,'Jerar');
    
$loginStrNameUsermysql_result($LoginRS,0,'NomUser');
    
$loginStrSecUsermysql_result($LoginRS,0,'Id_SecU');
    
//declare two session variables and assign them
    
$GLOBALS['MM_Username'] = $loginUsername;
    
$GLOBALS['MM_UserGroup'] = $loginStrGroup;          
    
$GLOBALS['MM_NameUser'] = $loginStrNameUser;          
    
$GLOBALS['MM_NameSec'] = $loginStrSecUser;

    
//register the session variables
    
session_register("MM_Username");
    
session_register("MM_UserGroup");
    
session_register("MM_NameUser");
    
session_register("MM_NameSec"); 

después, para el acceso a cualquiera de las variables de sesión desde otra página accedo de ésta manera:

Código PHP:
<?php echo $_SESSION['MM_Username']; ?>
Podría alguien darme una explicación y una solución porfa?
  #2 (permalink)  
Antiguo 13/04/2005, 10:29
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Bueno . .además del problema de seguridad que indicas .. en tu caso particular .. estabas mezclando dos métodos .. tal que tu código no funcionaría en register_globals = ON

En resumen . debes usar los arrays superglobales: $_SESSION .. $_POST ... $_GET .. etc. Si asocias que $_SESSION es un array común .. con la propiedad de que al usarlo junto con "session_start()" tiene la particularidad de manter esos datos por el tiempo que dure tu sesión .... Usalo como se de un array común se tratase:

Esto que usabas:

//declare two session variables and assign them
$GLOBALS['MM_Username'] = $loginUsername;
$GLOBALS['MM_UserGroup'] = $loginStrGroup;
$GLOBALS['MM_NameUser'] = $loginStrNameUser;
$GLOBALS['MM_NameSec'] = $loginStrSecUser;

//register the session variables
session_register("MM_Username");
session_register("MM_UserGroup");
session_register("MM_NameUser");
session_register("MM_NameSec");

Sería:

$_SESSION['MM_NameUser']=$loginUsername;

y así con todas .. (sin usar $GLOBALS ni nada más .. directamente). De hecho recuerda lo que te mencionaba sobre los arrays supeglobales . .no sólo sirven para $_SESSION (sesiones) .. también para variables que envias por un formulario .. por method= POST o GET . .por el URL .(GET) .. etc... Usalos!. (en las primeras FAQ's de este foro PHP tienes una sobre esto).

Un saludo,
  #3 (permalink)  
Antiguo 13/04/2005, 15:11
Avatar de Gabriel0702  
Fecha de Ingreso: febrero-2005
Mensajes: 155
Antigüedad: 19 años
Puntos: 0
Ok, gracias Cluster, voy a cambiar todo lo que anteriormente no tenía con superglobales para que ahora se maneje por medio de superglobales. Luego te cuento que pasó.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:27.