Foros del Web » Programando para Internet » PHP »

problema con sesiones y f5

Estas en el tema de problema con sesiones y f5 en el foro de PHP en Foros del Web. Buenas tardes tengo un problema que no consigo ver el porque de se comportamiento ej: unafuncion($unaOpc); //la declaracion de esta funcion esta en otro .php ...
  #1 (permalink)  
Antiguo 05/02/2012, 12:26
 
Fecha de Ingreso: febrero-2011
Mensajes: 89
Antigüedad: 13 años, 2 meses
Puntos: 1
problema con sesiones y f5

Buenas tardes
tengo un problema que no consigo ver el porque de se comportamiento

ej:
unafuncion($unaOpc);
//la declaracion de esta funcion esta en otro .php no en lamisma que se llama en otro modulo funciones.php

comprueba el valor de $unaOpc
if($opc==1)&&(!isset($_session["unaSession"]))
{
crearSession(); //aqui guarda un array en una variable de session y crea
$_session["unaSession"]//
}
else
{//si $_session["unaSession"] esta creada ya deberia entrar por aqui..
cargaSessionExistente();

}
//la pregunta es:
¿por que al refrecar la pagina si en la primera ejecucion ya se ha tenido que crear la session $_session["unaSession"]; vuelve a entrar por la 1º condicion?
en teoria ya esta creada la session aunque se refresque no lo entiendo

¿hay alguna forma de evitar el refresco de pagina ?

muchas gracias
  #2 (permalink)  
Antiguo 05/02/2012, 13:19
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: problema con sesiones y f5

Hola maldini, la condición if($opc==1)&&(!isset($_session["unaSession"])) no te asegura que la session no haya sido creada, simplemente que la clave unaSession no existe en el array de $_SESSION. Utiliza print_r para ver en cada momento lo que trae $_SESSION. Además es necesario asegurarse que crearSession(); funciona correctamente. Por otro lado, no se entiende que es cargaSessionExistente(); ya que si la session está iniciada los valores ya están el $_SESSION.
Saludos,
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 05/02/2012, 13:46
 
Fecha de Ingreso: febrero-2011
Mensajes: 89
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: problema con sesiones y f5

haber si puedo sintetizar un poco:
lo que quiero es que:
if (!isset($_session ["unArray"])){
//se carga un array en una variable de session
$_SESSION["unArray"]=$arrayEjemplo;


}
else{
//si ya existe $_session ["unArray"] la cargo en una variable
$unArray=$_SESSION["unArray"];

}
El problema es que si refresca esta pagina no me reconoce la session creada
¿hay alguna forma de evitar el refresco de una pagina? por Js o una etiqueta HTML

gracias por contestar
  #4 (permalink)  
Antiguo 05/02/2012, 13:57
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 20 años, 9 meses
Puntos: 105
Respuesta: problema con sesiones y f5

Holas,

Una consulta, usas al inicio de toda tu aplicacion o al inicio de tu archivo session_start() ?




Saludos
__________________
.: Gildus :.
  #5 (permalink)  
Antiguo 05/02/2012, 15:10
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: problema con sesiones y f5

El problema es que inicias mal la session o no la inicias en el lugar correcto. Verififca el funcionamiento de esas funciones tuyas. El fallo no es por F5 sino por el uso incorrecto de session_start() y session_destroy().
__________________
Fere libenter homines, id quod volunt, credunt.
  #6 (permalink)  
Antiguo 06/02/2012, 05:28
 
Fecha de Ingreso: febrero-2011
Mensajes: 89
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: problema con sesiones y f5

ok repara2,voy a revisar la creaccion de las sessiones aver si estan en un sitio que no deben de estar,aparte de esto si creas una variable de session por ejemplo cuando cargas la 1º vez la pagina si se refresca esa pagina ya se podra acceder a esa session creada la 1º vez ¿no es asi?.
lo que pretendo es basicamente guardarme un array en sesion la 1º vez que entro y las demas veces cargar ese array guardado en session

muchas gracias
  #7 (permalink)  
Antiguo 06/02/2012, 05:32
 
Fecha de Ingreso: febrero-2011
Mensajes: 89
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: problema con sesiones y f5

Cita:
Iniciado por gildus Ver Mensaje
Holas,

Una consulta, usas al inicio de toda tu aplicacion o al inicio de tu archivo session_start() ?




Saludos
al inicio del archivo funciones.php hago el session start(),no entiendo porque si se establecen esas sessiones al recargar esa pagina no reconoce esas sesiones creadas anteriormente
  #8 (permalink)  
Antiguo 06/02/2012, 08:29
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 20 años, 9 meses
Puntos: 105
Respuesta: problema con sesiones y f5

para entender mejor:

Tu archivo index.php:
Código PHP:
Ver original
  1. <?php
  2. require_once('funciones.php');
  3.  
  4. /*....*/


Es asi mas o menos lo que deberias de tener.

Saludos
__________________
.: Gildus :.
  #9 (permalink)  
Antiguo 06/02/2012, 09:04
 
Fecha de Ingreso: febrero-2011
Mensajes: 89
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: problema con sesiones y f5

si tengo session_start(); y despues en include del modulo de funciones
despues:

//compruebo si esta esta la session["unArray"] establecida y si session["estado"]==0
Código PHP:
Ver original
  1. if(session["unArray"] && isset( session["estado"]==1){
  2.   //Por aqui las ejecuciones siguientes..
  3.   $unArray=session["unArray"] ;
  4. }
  5.  
  6.  
  7. else{
  8. //deberia entrar por aqui la 1º ejecucion..
  9.  session["unArray"]=crearArray();//devuelve un array se lo asigno a la session
  10.  
  11. }
al volver a cargar la pagina vuleve a entrar por el else como si no estuviera isset session["unArray"] por que session["estado"] si vale 1
  #10 (permalink)  
Antiguo 06/02/2012, 09:30
Avatar de luis010182  
Fecha de Ingreso: julio-2009
Ubicación: Argentina - Capital Federal
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 27
Respuesta: problema con sesiones y f5

capaz que medio tonto pero no se si escribiste o lo copiaste de tu archivo.
proba con poner
if($opc==1)&&(!isset($_SESSION["unaSession"]))
en ves de
if($opc==1)&&(!isset($_session["unaSession"]))
  #11 (permalink)  
Antiguo 06/02/2012, 09:37
 
Fecha de Ingreso: febrero-2011
Mensajes: 89
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: problema con sesiones y f5

Cita:
Iniciado por luis010182 Ver Mensaje
capaz que medio tonto pero no se si escribiste o lo copiaste de tu archivo.
proba con poner
if($opc==1)&&(!isset($_SESSION["unaSession"]))
en ves de
if($opc==1)&&(!isset($_session["unaSession"]))
lo he escrito ahora por que no tengo el codigo delante ahora era a modo de ejemplo
  #12 (permalink)  
Antiguo 06/02/2012, 09:59
Avatar de luis010182  
Fecha de Ingreso: julio-2009
Ubicación: Argentina - Capital Federal
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 27
Respuesta: problema con sesiones y f5

proba con esto
Código PHP:
echo "<h1>INICIO</h1><pre>";
print_r($_SESSION);
echo 
"<pre>";  
unafuncion($unaOpc);

if(
$opc==1)&&(!isset($_session["unaSession"])){ 
crearSession();
echo 
"<hr><h1>CREADO VARIABLE</h1><pre>";
print_r($_SESSION);
echo 
"<pre>";  

}
else{
echo 
"<hr><h1>CARGANDO VARIABLE</h1><pre>";
print_r($_SESSION);
echo 
"<pre>";  
cargaSessionExistente();
}
echo 
"<hr><h1>FIN DEL SCRIPT</h1><pre>";
print_r($_SESSION);
echo 
"<pre>"
De esta forma vas a imprimir 3 veces las variable de session, fijate en que momento cambia o deja de existir la variable $_session["unaSession"].
  #13 (permalink)  
Antiguo 06/02/2012, 10:11
Avatar de luis010182  
Fecha de Ingreso: julio-2009
Ubicación: Argentina - Capital Federal
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 27
Respuesta: problema con sesiones y f5

para evitar la recarga de un formulario tenes que usar una variable de session.
Es mas o menos asi.
-En el formulario creas un campo oculto 'control' y al mismo tiempo creas una variable de session 'session_control'. tenes que cargar el campo oculto como la variable de session con el mismo valor, podes usar la funcion rand(9999, 99999999) u otra mas elaborada.
-Cuando envias el formulario lo primero que el valor del campo oculto sea igual a el valor la variable de session que se llama session_control. Si lo valores son diferentes le deciar al usuario que estos datos ya fueron procesados o lo redireccionas de nuevo al formulario
-Una ves que terminas procesar y hacer todos con los datos del formulario, tenes que eliminar la variable de session session_control, o al menos cambiar el valor.

De esta forma cuando recargar la pagina el campo oculto y la variable de session no son iguales.

Espero hacer sido claro
  #14 (permalink)  
Antiguo 06/02/2012, 12:02
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 20 años, 9 meses
Puntos: 105
Respuesta: problema con sesiones y f5

Cita:
Iniciado por maldini3783 Ver Mensaje
si tengo session_start(); y despues en include del modulo de funciones
despues:

//compruebo si esta esta la session["unArray"] establecida y si session["estado"]==0
Código PHP:
Ver original
  1. if(session["unArray"] && isset( session["estado"]==1){
  2.   //Por aqui las ejecuciones siguientes..
  3.   $unArray=session["unArray"] ;
  4. }
  5.  
  6.  
  7. else{
  8. //deberia entrar por aqui la 1º ejecucion..
  9.  session["unArray"]=crearArray();//devuelve un array se lo asigno a la session
  10.  
  11. }
al volver a cargar la pagina vuleve a entrar por el else como si no estuviera isset session["unArray"] por que session["estado"] si vale 1

No se si estes usando bien el termino o variable pero esto:

Código PHP:
Ver original
  1. if(session["unArray"] && isset( session["estado"]==1){

No deberia ser ? :
Código PHP:
Ver original
  1. if($_SESSION["unArray"] && isset( $_SESSION["estado"]==1){
__________________
.: Gildus :.
  #15 (permalink)  
Antiguo 07/02/2012, 09:43
 
Fecha de Ingreso: febrero-2011
Mensajes: 89
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: problema con sesiones y f5

Cita:
Iniciado por gildus Ver Mensaje
No se si estes usando bien el termino o variable pero esto:

Código PHP:
Ver original
  1. if(session["unArray"] && isset( session["estado"]==1){

No deberia ser ? :
Código PHP:
Ver original
  1. if($_SESSION["unArray"] && isset( $_SESSION["estado"]==1){
si tienes razon es como tu dices pero lo he puesto sin fijarme mucho en la sintaxis
sigo sin dar con el problema que apriori no parece tan complicado

solo quiero que la 1º vez que se entre cree una session["array"] =$array y los proximos accesos a esta pagina se cargue el array guardado en session hasta que $_session["cierre"]==1,que es cuando volvere a crearme un nuevo array con valores nuevos pero mientras valga $_session["cierre"]==0 sigo cargando el array guardado la 1º vez en session...no se chicos alguna idea mas,algo que me haga ver la luz!!!!
gracias

Última edición por maldini3783; 07/02/2012 a las 09:50
  #16 (permalink)  
Antiguo 07/02/2012, 15:51
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 20 años, 9 meses
Puntos: 105
Respuesta: problema con sesiones y f5

cual es el codigo en si, porque solo mostrastes unas lineas de condicionales y luego mencionastes creo que tienes un include a un archivo funciones.php, de alli no es claro como inicia tu script.

Saludos
__________________
.: Gildus :.
  #17 (permalink)  
Antiguo 09/02/2012, 08:15
 
Fecha de Ingreso: febrero-2011
Mensajes: 89
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: problema con sesiones y f5

Cita:
Iniciado por gildus Ver Mensaje
cual es el codigo en si, porque solo mostrastes unas lineas de condicionales y luego mencionastes creo que tienes un include a un archivo funciones.php, de alli no es claro como inicia tu script.

Saludos
ok en la pagina index.php tengo una llamada ala funcion crearTablaPartidos
Código HTML:
Ver original
  1. </head>
  2.  
Código PHP:
Ver original
  1. <?php
  2. creaTablaPartidos($idPais);
  3. ?>
Código HTML:
Ver original
  1. </body>
  2. </html>

esta funcion se encuentra en moduloGestion.php algo asi
Código PHP:
Ver original
  1. <?php
  2. moduloGestion.php;
  3. include_once "funciones/conexion.php";
  4. function moduloGestion($idPais){
  5.  if($idPais==1){
  6.    if(isset($_SESSION["arrayEsp"]&&isset($_SESSION["cierre"]==0){
  7.     $unArray=$_SESSION["arrayEsp"];
  8.     mostarArray($unArray);
  9.    }
  10.    else{
  11.  
  12.    }
  13. }
  14. elseif($idPais==2){
  15.    if(isset($_SESSION["arrayIta"]&&isset($_SESSION["cierre"]==0){
  16.      $unArray=$_SESSION["arrayIta"];
  17.      mostarArray($unArray);//funcion que muestra una tabla con equipos que recibe en el array
  18.     }
  19.     else{
  20.      estableceSessionPais($idPais);
  21.      }
  22.  
  23.  
  24.  
  25. }
  26. else{
  27.    if(isset($_SESSION["arrayIng"]&&isset($_SESSION["cierre"]==0){
  28.      $unArray=$_SESSION["arrayIng"];
  29.      mostarArray($unArray);
  30.     }
  31.     else{
  32.      estableceSessionPais($idPais);
  33.     }
  34.  }
  35. }
  36. function estableceSesiones($unPais){
  37.  //aqui se hace la consulta ala BD  en una funcion que me devuelve un $arrayequipos($equipo1->$equipo2)con el where de pais, creandome un arrayEquipos de cada pais,que metere en cada session dependiendo del pais,con el fin de cargar esos mismos partidos hasta que $_SESSION["cierre"]==1...
  38.  
  39. if($unPais==1){
  40.   $_SESSION["arrayEsp"]==$arrayEquipos//clave valor
  41.  }
  42. elseif($unPais==2){
  43.   $_SESSION["arrayIta"]=$arrayEquipos;
  44.  }
  45. else{
  46.   $_SESSION["arrayIng"]=$arrayEquipos;
  47.  }
  48. }
  49.  
  50. ?>

La cuestion es que cada vez que recargo la pagina el array deberia ser el mismo que se creo la 1º vez pero no...carga un nuevo array (Llama ala funcion de la consulta creandome otro $arrayequipos como si no estuvieran las sessiones de arrays creadas) alguna idea sugerencia

gracias de antemano

Última edición por maldini3783; 09/02/2012 a las 10:59
  #18 (permalink)  
Antiguo 09/02/2012, 11:01
 
Fecha de Ingreso: febrero-2011
Mensajes: 89
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: problema con sesiones y f5

Cita:
Iniciado por maldini3783 Ver Mensaje
ok en la pagina index.php tengo una llamada ala funcion crearTablaPartidos
Código PHP:
Ver original
  1. <?php
  2. creaTablaPartidos($idPais);
  3. ?>


esta funcion se encuentra en moduloGestion.php algo asi
Código PHP:
Ver original
  1. <?php
  2. moduloGestion.php;
  3. include_once "funciones/conexion.php";
  4. function moduloGestion($idPais){
  5.  if($idPais==1){
  6.    if(isset($_SESSION["arrayEsp"]&&isset($_SESSION["cierre"]==0){
  7.     $unArray=$_SESSION["arrayEsp"];
  8.     mostarArray($unArray);
  9.    }
  10.    else{
  11.  
  12.    }
  13. }
  14. elseif($idPais==2){
  15.    if(isset($_SESSION["arrayIta"]&&isset($_SESSION["cierre"]==0){
  16.      $unArray=$_SESSION["arrayIta"];
  17.      mostarArray($unArray);//funcion que muestra una tabla con equipos que recibe en el array
  18.     }
  19.     else{
  20.      estableceSessionPais($idPais);
  21.      }
  22.  
  23. }
  24. else{
  25.    if(isset($_SESSION["arrayIng"]&&isset($_SESSION["cierre"]==0){
  26.      $unArray=$_SESSION["arrayIng"];
  27.      mostarArray($unArray);
  28.     }
  29.     else{
  30.      estableceSessionPais($idPais);
  31.     }
  32.  }
  33. }
  34. function estableceSesiones($unPais){
  35.  //aqui se hace la consulta ala BD  en una funcion que me devuelve un $arrayequipos($equipo1->$equipo2)con el where de pais, creandome un arrayEquipos de cada pais,que metere en cada session dependiendo del pais,con el fin de cargar esos mismos partidos hasta que $_SESSION["cierre"]==1...
  36.  
  37. if($unPais==1){
  38.   $_SESSION["arrayEsp"]==$arrayEquipos//clave valor
  39.  }
  40. elseif($unPais==2){
  41.   $_SESSION["arrayIta"]=$arrayEquipos;
  42.  }
  43. else{
  44.   $_SESSION["arrayIng"]=$arrayEquipos;
  45.  }
  46. }
  47.  
  48. ?>

La cuestion es que cada vez que recargo la pagina el array deberia ser el mismo que se creo la 1º vez pero no...carga un nuevo array (Llama ala funcion de la consulta creandome otro $arrayequipos como si no estuvieran las sessiones de arrays creadas) alguna idea sugerencia

gracias de antemano
  #19 (permalink)  
Antiguo 09/02/2012, 13:04
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 20 años, 9 meses
Puntos: 105
Respuesta: problema con sesiones y f5

Pues a simple vista tienes un error, y creo que te dijeron antes en los post, y que session_start(), y no Session_start(), debe de estar al inicio de tu script y no despues de un html o una funcion o sea cual fuese.

Desde tu index por ejemplo:

Código PHP:
Ver original
  1. <?php
  2.    creaTablaPartidos($idPais);
  3. ?>
Por cada archivo tienes que inicializar session_start().

Si inicias dos veces session_start() te debe de mostrar algun error que mencione que no es posible, y si no te los muestra pues tienes que configurar tu php.ini para que te muestre los errores.

Saludos
__________________
.: Gildus :.
  #20 (permalink)  
Antiguo 09/02/2012, 17:37
Avatar de luis010182  
Fecha de Ingreso: julio-2009
Ubicación: Argentina - Capital Federal
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 27
Respuesta: problema con sesiones y f5

esta condicion se cumple " &&isset($_SESSION["cierre"]==0) " proba con sacarla o comentarla
  #21 (permalink)  
Antiguo 10/02/2012, 05:47
 
Fecha de Ingreso: febrero-2011
Mensajes: 89
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: problema con sesiones y f5

no le hagais caso a lo de session start en minusculas mayusculas da igual por que en el codigo esta correcto porque lo he escrto sin el codigo delante por eso en la sintaxis he podido confundirme ala hora de escribirlo aqui lo que quiero es analizar la logica del fallo de porque se comporta asi si estoy (se supone) haciendo las comprobaciones necesarias.no se si tendria que preguntar por la session!=null tambien.De todas formas muchas gracias por vuestras sugerencias y ayudas

Etiquetas: sesiones, variables
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 04:14.