Foros del Web » Programando para Internet » PHP »

Problemas con sessiones, no se actualizan.

Estas en el tema de Problemas con sessiones, no se actualizan. en el foro de PHP en Foros del Web. Hola, estoy utilizando el codigo de cluster, y me diante: $_SESSION['usuario_foco'] leo el valor del campo "general" correspondiente a esa session, pues bien mediante otro ...
  #1 (permalink)  
Antiguo 07/01/2004, 15:53
 
Fecha de Ingreso: febrero-2003
Mensajes: 763
Antigüedad: 21 años, 2 meses
Puntos: 2
Problemas con sessiones, no se actualizan.

Hola, estoy utilizando el codigo de cluster, y me diante: $_SESSION['usuario_foco'] leo el valor del campo "general" correspondiente a esa session, pues bien mediante otro codigo modifico el valor de general (lo ejecuta el propio usuario y modifica el campo de su sesion) la cosa es que mediante echo $_SESSION['usuario_foco'] veo el contenido del campo "general" pero no veo el nuevo contenido que habia antes de ser modificado, miro la base de datos mediante phpmyadmin y no coincide, entonces cerro sesion, habro de nuevo, y ahora si sale perfectamente, hay alguna forma de solucionar esto?

un saludo.
  #2 (permalink)  
Antiguo 07/01/2004, 16:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
No entendí bien el proceso que haces o donde pretendes obtener ese valor de esa variable de sesión cuando lo modificas.

Sólo te comento que para que un valor de una variable de sesión (aplicable a cookies también) quede disponible en su array asociativo ($_SESSION para el caso de las sesiones) .. la página/script ha de ser recargada .. o bien leida en otra página/script (se ha de hacer una "petición" al servidor) .. Las varibles de sesión quedarán disponibles en ese momento y no antes.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 08/01/2004, 10:19
 
Fecha de Ingreso: febrero-2003
Mensajes: 763
Antigüedad: 21 años, 2 meses
Puntos: 2
Pues no se exactamente que hacer para salucionar el problema, porque no se como funcionan las sessiones, solo quiero solucionar el problema de que si es modificado el campo que es utilizado por una session se actualize, ya que ahora si es modificado un campo que es visualizado con echo $_SESSION['usuario_foco'], actualizamos la pagina y sigue el valor antiguo para poder visualizar el valor actual tengo que salir y entrar de nuevo.

Bueno a ver si me podeis ayudar.

gracias
  #4 (permalink)  
Antiguo 08/01/2004, 10:23
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Lo siento, pero no entiendo lo que intentas explicar. Quizas mejor pones el codigo de los scripts, para ver exactamente lo que haces.

Porque lo que te entiendo es que modificas un dato en una base de datos, pero el cambio no se refleja en la sesion. Eso puede ser debido a que no grabas el dato modificado en la sesion.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 08/01/2004, 10:32
 
Fecha de Ingreso: febrero-2003
Mensajes: 763
Antigüedad: 21 años, 2 meses
Puntos: 2
Exactamente josemi, me pasa eso ultimo que has dicho que no se ve reflejado un cambio producido en un campo.

Mi script lo que hace es siemple:

El usario entra y dice:

Hola tal te quedan 2 mensajes. (ese 2 lo lee de la base de datos perteneciente a esa sesion)

Entonce el usuario, envia un mensaje, y ademas de enviar un mensaje, hace una pequeña modoficacion en la base de datos, valor_inicial-1 entonces ahora en el campo no esta el numero 2 si no 1
Una vez envia el mensaje es redireccionado a la pagina principal y sigue disiendo te quedan 2 mensajes y deberia de decir 1, entonces le doy a logout entro de nuevo y ahora dice, hola te quedan 1 mensaje.

En resumen que las modificaciones producidas durante la sesion no son actualizadas.

Y no entiendo porque,
  #6 (permalink)  
Antiguo 08/01/2004, 10:41
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Pero, ¿ese 2 lo muestras directamente desde la base de datos, o lo muestras desde una variable de sesion? Porque puede ser que el problema sea que el navegador esta mostrando la pagina original cacheada, es decir, cuando le dices que muestre por segunda vez la pagina, no la solicita del servidor, sino que coge el contenido de su cache.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #7 (permalink)  
Antiguo 08/01/2004, 11:05
 
Fecha de Ingreso: febrero-2003
Mensajes: 763
Antigüedad: 21 años, 2 meses
Puntos: 2
ese 2 lo recojo mediante $_SESSION['usuario_foco'] y a eso que te refieres habia caido, pero no es ese el problema, ya que si en ese campo llega a 0 de enviar dos mensaje si intenta enviar otro deberia salir "lo siento no te quedan creditos" y no sale, para que salga tengo que cerrar e iniciar session

saludos
  #8 (permalink)  
Antiguo 08/01/2004, 11:10
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Bien, entonces comprueba que el codigo donde haces:
Código PHP:
$_SESSION['usuario_foco']=campo de la base de datos 
se ejecuta siempre que cargas esa pagina.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #9 (permalink)  
Antiguo 08/01/2004, 11:21
 
Fecha de Ingreso: febrero-2003
Mensajes: 763
Antigüedad: 21 años, 2 meses
Puntos: 2
Bien la parte de mi codigo donde miraba el valor de ese campo es esta:

Código PHP:
$valor=$_SESSION['usuario_foco']; 
y quedaria asi:

Código PHP:
$valor=$_SESSION['usuario_foco']=general
Gracias,
  #10 (permalink)  
Antiguo 08/01/2004, 11:36
 
Fecha de Ingreso: febrero-2003
Mensajes: 763
Antigüedad: 21 años, 2 meses
Puntos: 2
No ha funcionado, supogon que lo que yo he posteado esta mal, porque envez de tomar el valor, se cree que el valor es la palabra general, como podria adaptar tu idea, la estructura de mi php es esta $valor=a numero actualizado del campo de usuario utiliza en esa session

un saludo
  #11 (permalink)  
Antiguo 08/01/2004, 14:53
 
Fecha de Ingreso: febrero-2003
Mensajes: 763
Antigüedad: 21 años, 2 meses
Puntos: 2
alguna solucion?
  #12 (permalink)  
Antiguo 08/01/2004, 15:39
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Veamos, pero ¿donde asignabas antes valor a $_SESSION['usuario_foco']? Porque en algun sitio le dabas ese valor 2.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #13 (permalink)  
Antiguo 09/01/2004, 09:16
 
Fecha de Ingreso: febrero-2003
Mensajes: 763
Antigüedad: 21 años, 2 meses
Puntos: 2
Bien pues dentro de aut_verifica.inc.php

Consigo leer ese 2 mediante este codigo
$usuario_consulta = mysql_query("SELECT ID,..... FROM....

$_SESSION['usuario_foco']=$usuario_datos['ID'];

Entonces al asignar estos valores, y decir que campo quiero lleer mediante: $_SESSION['usuario_foco']

Entonces mediante, esta variable recojo el calor de ese campo

$valor=$_SESSION['usuario_foco']

Todo funciona perfecto, pero resulta que ese campo es modificado por el propio usuario y llega un punto que ese dos cambia a uno y a cero, pero sigue creyendo que es 2 aunque el campo sea 0 o 1

Para poder que se actualize tengo que salir y entrar de nuevo.

¿hay algun forma de que cada vez que mire se actualize, una vez vista caduque en la session y vuelva a mirar el campo? Ya que segun veo una vez que mira ese campo no lo vuelve a mirar y queda el mismo valor en esa session

Un Saludo
  #14 (permalink)  
Antiguo 09/01/2004, 14:22
 
Fecha de Ingreso: febrero-2003
Mensajes: 763
Antigüedad: 21 años, 2 meses
Puntos: 2
alguna ayuda, por favor, este problema es muy importante para mi solucionarlo.

  #15 (permalink)  
Antiguo 09/01/2004, 15:22
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Creo que me estoy liando un poco. ¿El campo que cambia en la base de datos es el ID? O al menos eso es lo que entiendo que el valor 2 lo asignas a $_SESSION['usuario_foco']. Es decir, que lo que muestras es el ID de la tabla.

Tampoco se exactamente en que punto de aut_verifica.inc.php estas metiendo ese codigo, pero puede que sea en la parte que solo se ejecuta cuando no existe un usuario logeado (no existe la sesion o no es valido). Supongo que sera en la parte que se carga el "perfil" del usuario.

Yo lo que haria seria modificar a mano el valor en la sesion a la vez que en la base de datos. Algo asi:
Código PHP:
$sql="UPDATE tabla SET campo='$nuevo_valor' WHERE ...";
mysql_query($sql);
$_SESSION['usuario_foco']=$nuevo_valor
Es decir, cambiar el valor de la sesion directamente, no forzar a releer todo el perfil.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #16 (permalink)  
Antiguo 09/01/2004, 15:41
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 6 meses
Puntos: 41
Y yo me acabo de enredar más ahora... yo pensaba que lo que estabas haciendo era leer uno por uno los registros de la BD y que ese $_SESSION['usuario_foco'] te indicaba el registro que estás leyendo... o sea que utilizabas esa variable de sesión como puntero...

Si ese es el caso... entonces no habría que cambiar ningún valor en la BD...

simplemente al final del script hacer:
Código PHP:
$_SESSION['usuario_foco']=$_SESSION['usuario_foco']-1;

//que es lo mismo que poner:
$_SESSION['usuario_foco']--;//dos signos "menos" 
Y al comienzo algo como:
Código PHP:
if(!empty($_SESSION['usuario_foco'])){
    if(
$_SESSION['usuario_foco']==0){
          echo 
"Ya no hay más registros que mostrar";
    }

No sé si entendí bien... pero igual creo que deberías explicarlo mejor... por ejemplo contarnos qué es lo que hace tu script.

Saludos
  #17 (permalink)  
Antiguo 09/01/2004, 17:04
 
Fecha de Ingreso: febrero-2003
Mensajes: 763
Antigüedad: 21 años, 2 meses
Puntos: 2
Vale, os explico brevemente en lo que consiste mi web y las modificaciones que he hecho al script de cluster.

Instale el script de cluster y la primera modificación fue añadir 3 campos mas, nombre, email y general.

Mediante un script hecho por mi y vuestra ayuda, cree una pagina de registro automático para que mis usuarios se pudieran registrar solos, donde ponen Nombre (escribe en el campo que cree nuevo) email (también) user y contraseña.

Yo aproveche el campo nivel_usuario para que cada registro tuviera por defecto el valor 1 y el campo general por defecto el valor 20, entonces

Mis usuarios tienen un formulario para enviar sms y cada vez que envían un sms ejecutan este comando:

<?
include("config.php");
$sql = "UPDATE usuarios SET nivel_usuario = nivel_usuario -1 WHERE id='{$_SESSION['usuario_super']}'"; //mira el id del usuario a modificar
mysql_query($sql) or die(mysql_error());
?>

Y aquí es donde viene el problema, este código tiene que leer el valor de nivel_usuario y restarle 1, como lo hace directamente al campo funciona perfectamente. ¿pero que ocurre? Que el campo queda con el valor 0 a causa de ejecutar ese script, pero en la session sigue teniendo el valor 1, entonces todo lo que hecho no sirve para nada si no se hace un logout y resetea y mira de nuevo el campo.

Creo que se podrían hacer dos cosas modificar ese código para que ademas de restar 1 al campo también resite 1 a la session o que cada vez que mire el valor de campo mediante $_SESSION['usuario_super'] no mire la session si no el campo, por si mira la session me devolverá el valor antiguo

No se si me habré explicado bien, pero en definitiva este es mi problema si necesitáis mas información o algún trozo de algún código decírmelo.

Un saludo
  #18 (permalink)  
Antiguo 09/01/2004, 17:31
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 6 meses
Puntos: 41
Entonces existe la variable llamada $_SESSION['nivel_usuario']?? supongo que esa es la que llamabas $_SESSION['usuario_foco']...

Supondré que el valor del campo nivel_usuario lo almacenaste en la variable $_SESSION['usuario_foco']... Tu script tendría que ser así:
Código PHP:
<?
include("config.php");
$sql "UPDATE usuarios SET nivel_usuario = nivel_usuario -1 WHERE id='{$_SESSION['usuario_super']}'"//mira el id del usuario a modificar
mysql_query($sql) or die(mysql_error());
$_SESSION['usuario_foco']--;//Acá le has restado uno a la variable de sesión
?>
Nada más... otra vez no sé si entendí bien.

Saludos
  #19 (permalink)  
Antiguo 09/01/2004, 17:45
 
Fecha de Ingreso: febrero-2003
Mensajes: 763
Antigüedad: 21 años, 2 meses
Puntos: 2
Gracias, Exasto, y tu suposicion es correcta, voy a probar que tal funciona,

un saludo
  #20 (permalink)  
Antiguo 09/01/2004, 18:06
 
Fecha de Ingreso: febrero-2003
Mensajes: 763
Antigüedad: 21 años, 2 meses
Puntos: 2
funciona perfectamente muchas gracias
  #21 (permalink)  
Antiguo 09/01/2004, 18:15
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 6 meses
Puntos: 41
ok... si te das cuenta... la respuesta está en una sola línea... y de lo más sencilla...
Por eso cuando hagas una pregunta trata de dar la mayor cantidad de información que creas relevante...

De todos modos... qué bueno que se haya solucionado tu problema.

Saludos
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 18:03.