Ver Mensaje Individual
  #2 (permalink)  
Antiguo 25/02/2005, 07:09
Cluster
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
En realidad lo que es "inseguro" no es registrar tu variable de sesión por la función: session_register() .. sino el acceso "global" que haces de ella "$count" .. en su defecto deberías usar $HTTP_SESSION_VARS ...

Te comento un caso (aunque ya lo comenté en su tiempo y lo dejé como FAQ de las primeras de este foro PHP) ..

Con register_globals a ON (1) .. Puedo hacer:

nose.php?count=1

para "suplantar" el valor de una variable de sesión (que debe tomar su valor del "servidor") por algo que ingrese por el URL como ese caso ya que al usar register_globals a ON no discrimina PHP sobre por donde o que método entra tu variable al script (es aplicable a otros métodos como POST, cookies .. etc).

Si bien con la función session_is_register() ese problema tal vez se solucione (podrías probarlo y nos comentas) .. muchooooos programadores hacen cosas como:

Código PHP:
session_start();
session_register("autentificado")
$autentificado="SI" 
y de ahí en otro script hacen

Código PHP:
session_start();
if (
$autentificado == "SI"){
   echo 
"Hola .. estas autentificado . .que bien .. urra!";

Cuando usas el array superglobal $_SESSION .. te hace independiente de si usas register_globals a ON o a OFF (1 o 0) .. cosa que usarlo como "$count" sólo se puede usar bajo register_globals a ON .. (no hay que pensar en "promedios" si tales configuraciones lo usan a ON .. falta ese que se sale del promedio o standard y tu aplicación no funcionará).

A futuro .. session_register() y todo el grupo de funciones de ese estilo desapareceran (es probable) .. pues si te fijas .. ahora si te bajas cualquier versión actual de PHP . .por defecto (desde la versión 4.2.x aprox.) la directiva: register_globals .. viene a OFF (0) para que te "acostumbres" a ese trabajo con variables externas "seguro" donde discrimines por el método que llegan tus variables y no confundir o "suplantar" el método que esperas por donde llega esa variable.


Fijate en la versión en ingles del manual oficial de PHP sobre el tema sesiones .. no tienen esos ejemplos ya con session_register y demás .. alegando este parrafo:

Cita:
Use of $_SESSION (or $HTTP_SESSION_VARS with PHP 4.0.6 or less) is recommended for improved security and code readability. With $_SESSION, there is no need to use the session_register(), session_unregister(), session_is_registered() functions. Session variables are accessible like any other variables.
http://www.php.net/manual/en/ref.session.php

El tema que comentas de
Cita:
Nota: A partir de PHP 4.1.0, $_SESSION está disponible como variable global, al igual que $_POST, $_GET, $_REQUEST y demás. Al contrario que $HTTP_SESSION_VARS, $_SESSION siempre es global. Por tanto, no se debe usar global para $_SESSION.
Eso se refiere al "ambito" de las variables .. en general .. de hecho es válido para todo array superglobal .. Ejemplo:

Usando $HTTP_SESSION_VARS .. si tu lo pretendes acceder -dentro- de una función .. no pudras hacerlo "globalmente" si no lo defines como tal o se lo pasas como parámetro:

Código PHP:
function nose(){
global 
$HTTP_SESSION_VARS
echo $HTTP_SESSION_VARS['nose'];

Mientras que con los arrays "superglobales" .. puedes hacer:

Código PHP:
function nose(){
echo 
$_SESSION['nose'];

Por qué es "global" .. es decir, tiene todo ambito en el script que se está ejecutando (+ en toda la aplicación y sesión activa .. pues es una sesión .. ).


Un saludo,

Un saludo,