Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Problemilla con sesion

Estas en el tema de Problemilla con sesion en el foro de Frameworks y PHP orientado a objetos en Foros del Web. tengo guardada una sesion , y cuadno accedo a un php y kiero ver los valores de la session los veo perfectos :D xo en ...
  #1 (permalink)  
Antiguo 03/06/2005, 03:01
 
Fecha de Ingreso: mayo-2005
Mensajes: 423
Antigüedad: 19 años
Puntos: 1
Problemilla con sesion

tengo guardada una sesion , y cuadno accedo a un php y kiero ver los valores de la session los veo perfectos :D xo en esa misma venta tengo un form q cuando le doy al boton me va al mismo php xa actualizar ls datos y los datos que quiero actualizar ls algunos que estan dentro de la sesion ademas de introducirlos luego en la base de datos xo todos los valores de la sesion me son nulos :S no me sale ningun valor

bueno lo he arreglado pero no entiendo pq hay veces q puedo hacer

<p><? $_SESSION['a']->getNombre() ?></p> y otras no y tengo q hacerlo con echo

pq puede ser

saludos
__________________
Dios creo un equipo perfecto a los demas los lleno de extranjeros
  #2 (permalink)  
Antiguo 03/06/2005, 03:53
 
Fecha de Ingreso: mayo-2005
Mensajes: 423
Antigüedad: 19 años
Puntos: 1
Otra cosa mas cuadno en una sesion guardo un objeto y luego actualizar un atributo de ese objeto como lo hago lo intento con metodos get y set y no lo hace :(
__________________
Dios creo un equipo perfecto a los demas los lleno de extranjeros
  #3 (permalink)  
Antiguo 03/06/2005, 08:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Si no indicas el código de tu objeto .. es complicado ver como funciona para ver si lo estás usando bien o no ...

Se supone que tu usaras tu sesion (variable) como "transporte" .. nada más ..

Así que (por mi parte yo hago):

Código PHP:
<?
// llamo a la classe que contiene el objeto ..
include ("mi_objeto.php");
// inicio uso sesiones
session_start();
// comprobación "continuar con el objeto de la sesión .. o instanciarlo nuevamente".
if (isset($_SESSION['a']){
   
// si está definida mi variable de sesión .. el objeto trae ya sus variables .. 
   
$mi_objeto=$_SESSION['a'];
} else {
   
// si no está creada la variable de sesión .. instancio el objeto ...
   
$mi_objeto=new mi_objeto();
}

// Luego uso los metodos de este .. por ejemplo:
echo $mi_objeto->getName();

$mi_objeto->setName(); 
// realmente no sé lo que hace tu método .... pero por si acaso ..
// una vez trabajado el objeto .. al final .. lo llevo a la variable de sesión:
// lo puedes hacer así .. o te creas algún método para gestionarlo integrado en tu classe.
$_SESSION['a']=$mi_objeto;
?>

Pero, .. en resumen .. sólo te puedo indicar que las sesiones (los valores que des a las variables que crees) sólo quedan disponibles en la próxima iteracción con el servidor .. es decir .. si tu defines en un mismo flujo de un script un dato para tu variable de sesión "a" .. dicho dato no estará completamente disponible hasta que recargues la página o lo leas en otra (la sesión).

Un saludo,
  #4 (permalink)  
Antiguo 03/06/2005, 08:57
 
Fecha de Ingreso: mayo-2005
Mensajes: 423
Antigüedad: 19 años
Puntos: 1
los metodos set y gtet q te he comentado tienen la misma funcion q ls set y get de java voy a probar con eso q no se me habia ocurrido un saludo
__________________
Dios creo un equipo perfecto a los demas los lleno de extranjeros
  #5 (permalink)  
Antiguo 03/06/2005, 09:02
 
Fecha de Ingreso: mayo-2005
Mensajes: 423
Antigüedad: 19 años
Puntos: 1
Código PHP:
$medico->setDirec($_POST['dir']);
    echo
"<br>Actualizacion Realizada<br>";
    echo
"<a href=\"MenuMedico.php\">Volver a Menu</a><br>";
    
$gbm->cerrarConexion();
    echo 
$medico->getDir();
    
$_SESSION['medico']=$medico;
    }else if(
$_POST['mod']!=null){ 
pero sigue sin actualizarme :S

el metodo setDir es este
Código PHP:
function setDirec($dni)
            {
            
$this->direct$dni;
            } 
y el resutlado es este

zugazarte 56 BV 1B
Actualizacion Realizada
Volver a Menu
zugazarte 56
__________________
Dios creo un equipo perfecto a los demas los lleno de extranjeros
  #6 (permalink)  
Antiguo 03/06/2005, 10:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Ya te decía que no puedes ver el valor de una variable de sesión en el mismo flujo del script .. debes recargar tu página o redireccionar para que la sesión quede con sus nuevos valores (tus variables) ..

Un saludo,
  #7 (permalink)  
Antiguo 03/06/2005, 12:37
 
Fecha de Ingreso: mayo-2005
Mensajes: 423
Antigüedad: 19 años
Puntos: 1
vamos q tras hacer eso tengo q hacer un refresco ???

un saludo
__________________
Dios creo un equipo perfecto a los demas los lleno de extranjeros
  #8 (permalink)  
Antiguo 03/06/2005, 12:53
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Cita:
Iniciado por Legolas_Bilbao
bueno lo he arreglado pero no entiendo pq hay veces q puedo hacer
<p><? $_SESSION['a']->getNombre() ?></p> y otras no y tengo q hacerlo con echo
pq puede ser
Siempre tienes que utilizar "echo" (o similar). De otra manera no imprimirá nada. La única manera de que eso imprima algo es si el método getNombre() contiene un "echo". También existe la forma abreviada <?=$variable ?> (nota el signo "=") que es como hacer un "echo".
-----------------------------------------

Sobre el otro tema:
No entiendo del todo qué es lo que debería imprimir. sería bueno que pongas un poco más de código y algo como: "debería imprimir ESTO, pero imprime ESTO OTRO".

Aunque, como dice Cluster, las variables no se registran verdaderamente en la sesión hasta que finaliza el script (por eso lo de la redirección o recarga). Pero eso casi nunca tiene una influencia directa durante el flujo de un script si utilizas el superglobal $_SESSION. Supongo que pasará si utilizas funciones como session_register() y luego tratas de verificar con session_is_registered()... pero esas funciones van cayendo en el desuso. Y no es tu caso.

Tal vez lo que esté pasando es que no asignas $medico y $_SESSION['medico'] por referencia y estás trabajando con dos objetos distintos. Entonces actualizas uno, pero no tiene por qué verse reflejado en el otro.
Para pasar por referencia utiliza el operador "&":
Código PHP:
$_SESSION['medico'] =& $medico
Pero si no es esto, entonces por favor trata de explicar mejor el problema.
Saludos

Última edición por jpinedo; 03/06/2005 a las 13:55
  #9 (permalink)  
Antiguo 03/06/2005, 15:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Legolas_Bilbao
vamos q tras hacer eso tengo q hacer un refresco ???

un saludo
No es necesario un refresco a la misma página .. pero ahí mismo no vas a obtener su valor real modificado (el de tu objeto que llevas en tu sesión) ... pero si que podrías ver sus nuevos valores donde linkeas:

echo"<a href=\"MenuMedico.php\">Volver a Menu</a><br>";

es decir .. en "MenuMedico.php" puedes ver el valor de tu variable de sesión con el método que corresponda para extraer ese dato e instanaciando el objeto como te he comentado en el código anterior sobre ver si existe tu variable de sesión .. se continua su usu y si no está se instancia nuevamente (en tal caso . .comprueba que realmente quedó registrada tu varaible de sesión .. sino, el problema lo tienes con las sesiones y su propagación del SID más que con tu própio objeto ...)

Un saludo,
  #10 (permalink)  
Antiguo 03/06/2005, 17:37
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Cluster... no estoy de acuerdo con lo que propones. O, en todo caso, no te he entendido.
Me gustaría que pongas un ejemplo donde no se pueda leer el valor de una variable de sesión que se ha definido en el misma ejecución del script (para ilustrar mejor lo que dices). Es que no se me ocurre ninguno.
O sea, para mí el hecho de que la variable no se registre en la sesión hasta que finaliza el script no es un impedimento para acceder a a su valor. Te pongo un ejemplo.
Código PHP:
<?php
class Medico{
    var 
$nombre "Nombre por defecto";
    function 
setNombre($nombre){
        
$this->nombre $nombre;
    }
    function 
getNombre(){
        return 
$this->nombre;
    }
}

session_start();
if(!isset(
$_SESSION['medico']))
    
$_SESSION['medico'] = & new Medico();

if(isset(
$_GET['nombre']))
    
$_SESSION['medico']->setNombre($_GET['nombre']);// Variable actualizada en esta ejecución

echo "Valor de \$_SESSION['nombre'] guardado :: ".$_SESSION['medico']->getNombre();// imprime el valor actualizado en esta ejecución
echo "<hr />";
echo 
"Cambiar el nombre a:<br />";
echo 
"<a href=\"?nombre=Pepe\">Pepe</a><br />";
echo 
"<a href=\"?nombre=Juan\">Juan</a><br />";
?>
Saludos
  #11 (permalink)  
Antiguo 06/06/2005, 06:45
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues .. no, no es un impedimento .. pero ese no es el valor real de la variable de sesión (el valor que tiene actualmente), sino el que le vas a dar y que no quedará registrado hasta que termine la ejecución de tu script y PHP la almacene en el servidor .. Si ese es la teoría de como funciona PHP .. por claridad del código nunca accedo a esa variable en esa situación:

Si tenemos:

Código PHP:
<?
session_start
();
// damos un valor a una variable de sesión
$_SESSION['variable_sesion']=$_GET['variable'];

// no hago:
echo $_SESSION['variable_variable'];

// sino:
echo $_GET['variable'];
// que es la variable que realmente está trabajando este script en este momento.

// o a lo sumo hago la propuesta anterior: (al principio del script)
if (isset($_SESSION['variable_sesion']){
   
$objeto=$_SESSION['variable_sesion'];
} else {
   
$objeto=new objeto();
}

//uso objeto:
$objeto->metodo();
// altero objeto (variables):
$objeto->altera_valores($_GET['variable']);
// vuelco objeto a sesión nuevamente al terminar el uso del objeto .. sea así o con un método de la própia classe.
// antigüamente con hacer session_register($objeto) al principio del código podíamos trabajar para leer/dar valor a dicha variable de sesión en cualquier punto del código .. ahora:
$_SESSION['variable_sesion']=$objeto;
// si no usamos médodos que alteren las variables del mismo .. podríamos omitir este punto. También depende como se trabaje el objeto .. si el mismo registra ya sus variable en la sesión o no ...
?>
Lo que propongo sobre "recargar" la página o bien leer dicha variable de sesión en la próxima petición al servidor simplemente es para obtener el valor real de la sesión en curso, de esta forma también se vé si se llegó a crear en caso de algún fallo tipo: falla de propagación del SID, de creación de la sesión en sí .. etc.

Un saludo,
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 21:31.