PHP - problema con las sesiones de PHP

 
Vista:

problema con las sesiones de PHP

Publicado por jrss (5 intervenciones) el 12/07/2005 18:05:03
Hola. Tengo un problema bastante grave, más por las consecuencias que me acarrea que por su incidencia en mi programación. Me explico.
tengo un servidor Apache con PHP4.2.2 y register_globals a OFF.
la estructura de las páginas a la hora de tratar las variables de sesión es la siguiente.
pagina1.php
<?php
session_register("var1");
$_SESSION["var1"]="hola";
?>

pagina2.php
<?php
session_register("var1");
echo $_SESSION["var1"]; //esto imprime "hola"
?>

Bien. este codigo funciona. ¿Donde está el problema? en el manual oficial de Zend se dice:
If you want your script to work regardless of register_globals, you need to instead use the $_SESSION array as $_SESSION entries are automatically registered. If your script uses session_register(), it will not work in environments where the PHP directive register_globals is disabled.

If you are using $_SESSION (or $HTTP_SESSION_VARS), do not use session_register(), session_is_registered(), and session_unregister().

Before PHP 4.3, if you are using $_SESSION and you have disabled register_globals, don't use session_register(), session_is_registered() or session_unregister().

En mi deficiente ingles he entendido: LAS PAGINAS QUE YO HE HECHO NO DEBERíAN FUNCIONAR. pero funcionan.
Necesito saber porqué dicen eso en el manual y como se puede explicar que mis páginas funcionen y no den warnings ni notices ni nada.

Gracias. Un desesperado. (que ni siquiera cuando funcione un codigo me dejen trankilo :( )
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:problema con las sesiones de PHP

Publicado por Mike79 (669 intervenciones) el 12/07/2005 18:20:03
La documentación dice:

If you want your script to work regardless of register_globals, you need to instead use the $_SESSION array as $_SESSION entries are automatically registered. If your script uses session_register(), it will not work in environments where the PHP directive register_globals is disabled.

Lo que traducido al español significa:

Si desea que su script funcione independientemente de register_globals, necesita usar en su lugar la matriz $_SESSION, dado que las entradas de $_SESSION son registradas automáticamente. Si su script usa session_register(), no funcionará en entornos en donde la directiva PHP register_globals esté deshabilitada.

Es decir, que si tu usas la matriz $_SESSION no hay problemas.

A tus scripts quitales esta linea:
session_register("var1");
y deja lo demas igual, y debe funcionar.

En si lo que pasa en tu caso es que: session_register no esta haciendo absolutamente nada, la que esta guardando la variable es: $_SESSION["var1"]="hola"; por eso funciona.

Saludos!
-
Miguel Angel
Mike79
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problema con las sesiones de PHP

Publicado por jrss (5 intervenciones) el 12/07/2005 19:02:12
Muchas gracias por tu aclaración. Me yuda bastante, pero quitando session_register no funciona, tengo que poner obligatoriamente session_start() como mínimo (que para inicio de sesiones es equivalente a session_register) y en todas las paginas.
De todas formas no he conseguido que funcione igual para páginas con register globlas a ON porque hay variables de sesion de tipo array a las que le hago un unset($_SESSION["var1"]); y cuando se vuelve a cargar la pagina resulta que tienen el doble de elementos. o sea que no se ha echo el unset. En el manual se dice que no se haga unset($_SESSION) como es logico y obvio pero yo lo hago a $_SESSION["var1"] que con register_globals a OFF funciona pero con Register globals a ON no. ????? Gracias por tu constestación Miguel Angel.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problema con las sesiones de PHP

Publicado por Mike79 (669 intervenciones) el 12/07/2005 21:01:35
Pero session_start no solo se usa la primera vez, tambien continua una sesion, el chiste es que session_register llama a session_start pero la matriz $_SESSION necesita forzosamente session_start, tal como lo dice la documentación:

If session_start() was not called before this function is called, an implicit call to session_start() with no parameters will be made. $_SESSION does not mimic this behavior and requires session_start() before use.

Si session_start() no fue llamada antes de que ésta función sea llamada, se realizará un llamado implícito a session_start() sin parámetro alguno. $_SESSION no imita este comportamiento y requiere session_start() antes de su uso.

Con register_globals en on, se necesita usar: session_unregister() en lugar de unset.

Saludos!
-
Miguel Angel
Mike79
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problema con las sesiones de PHP

Publicado por jrss (5 intervenciones) el 13/07/2005 09:09:52
Muchisimas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problema con las sesiones de PHP

Publicado por jrss (5 intervenciones) el 13/07/2005 09:20:21
Por si vale de algo, expongo otras cosas que he visto buscando por la web. Al parecer no se usa session_register porque, según como esté estructurado el código puede suponer una puerta abierta para la injección. No creo que mi código tenga problemas de seguridad pero tendré que quitar session_register y poner session_start().
Lo que no entiendo todavía es cómo ponen tan taxativamente que No se use la función sin dar más explicaciones, pero bueno, supongo que he tenido mala suerte, no?? :(
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problema con las sesiones de PHP

Publicado por Mike79 (669 intervenciones) el 14/07/2005 05:17:30
Muy en lo personal, no confio en las sessiones de php, por que en si, las considero un problema de seguridad, por 2 simples razones.

1.- Por default, todas la información de las sessiones se almacena en una carpeta temporal, que esta compartida por todos los usuarios. Si algun usuario puede entrar al sistema, entonces puede ver y manipular cualquier sesion de otro usuario.

2.- Si existe algun error o bug en estas funciones, o descubren una forma de explotar las sesiones (como ha ocurrido en el pasado), tu codigo queda automaticamente comprometido, aunque la logica y demas este bien.

Llama anticuado, pero cuando se trata de seguridad prefiero saber exactamente que se esta haciendo y no confiarselo a los programas o funciones.

Saludos!
-
Miguel Angel
Mike79
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problema con las sesiones de PHP

Publicado por jrss (5 intervenciones) el 14/07/2005 10:39:50
completamente de acuerdo, pero es que siempre estamos en proyectos de aplicaciones web que son tan grandes o mas que los programas en visual, ya sea Güindows o Linux. Y la verdad es que no contar con variables te lo pone muy dificil y andar con el post y el get es un coñazo, como te descuides un segundo seguro que abres un agujero como el de la capa de ozono. En mi opinión creo que Zend se debería poner en serio con las variables de session e invertir todo su tiempo en hacerlo seguro y fiable, porque cuando te acostumbras a usar las variables como dios manda programas bastante más rápido y puedes hacer cosas mucho más complejo. Y en lo personal... Que se dejen de register globals que si si que si no, coño, que lo dejen trankilo y no hagan excepciones, llevo un mogollón de tiempo usando sesiones y mira como fallé con lo de session_register porque hay cientos de excepciones raras que ni siquiera fallan. Si hay una forma de hacerlo bien, que no den opción a hacerlo mal no??.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar