Foros del Web » Programando para Internet » PHP »

Una página no me mantiene la session

Estas en el tema de Una página no me mantiene la session en el foro de PHP en Foros del Web. El asunto va a sí, tengo mi aplicación en php y en cada una de las página lo primero que hago es chequear si la ...
  #1 (permalink)  
Antiguo 21/08/2012, 08:33
 
Fecha de Ingreso: abril-2010
Mensajes: 31
Antigüedad: 14 años, 7 meses
Puntos: 1
Una página no me mantiene la session

El asunto va a sí, tengo mi aplicación en php y en cada una de las página lo primero que hago es chequear si la sesión está iniciada, y si no redirijo el usuario para que le de un mensaje de error.

Pero por alguna razón una de mis página no me está encontrando el array $_SESSION, al hacer un var_dump() me lo muestra como un array vacío, pero en todas las demás páginas sí aparece bien.

Además, esto ocurre solo la primera vez que entro a esta página. Si me deslogueo y me vuelvo a loguear, todo funciona en orden.

El código va más o menos así:

Código PHP:
<?php 
session_start
();
if(!isset(
$_SESSION['IdUsuario'])) { header('location:denied.php'); }
else{
  
//funcionalidad aquí
}
?>
El problema está en que cuando verifico si está seteado el id de usuario, $_SESSION aparece vacío. Pero solo pasa en esta página, y solo la primera vez que me logueo, eso es lo más extraño.
  #2 (permalink)  
Antiguo 21/08/2012, 09:53
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Una página no me mantiene la session

muy raro raro .... ... la primera vez que entras en esta pagina de donde procedes ??
  #3 (permalink)  
Antiguo 21/08/2012, 10:05
 
Fecha de Ingreso: julio-2012
Mensajes: 276
Antigüedad: 12 años, 3 meses
Puntos: 27
Respuesta: Una página no me mantiene la session

Código PHP:
Ver original
  1. <?php  
  2. $_SESSION['IdUsuario'] = "Tu nombre";
  3. if($_SESSION['IdUsuario']){
  4. echo "Tu nombre es $_SESSION[IdUsuario]";
  5. else{
  6. echo "Session no creada";
  7. }
  8. ?>
  #4 (permalink)  
Antiguo 21/08/2012, 10:12
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Una página no me mantiene la session

Cita:
Iniciado por PepeF Ver Mensaje
Código PHP:
Ver original
  1. <?php  
  2. $_SESSION['IdUsuario'] = "Tu nombre";
  3. if($_SESSION['IdUsuario']){
  4. echo "Tu nombre es $_SESSION[IdUsuario]";
  5. else{
  6. echo "Session no creada";
  7. }
  8. ?>
?
  #5 (permalink)  
Antiguo 21/08/2012, 10:30
 
Fecha de Ingreso: julio-2012
Mensajes: 276
Antigüedad: 12 años, 3 meses
Puntos: 27
Respuesta: Una página no me mantiene la session

¿?
Sorry

Código PHP:
Ver original
  1. <?php  
  2. if(empty($_SESSION['IdUsuario'])){
  3. echo "No Session";
  4. else{
  5. echo "Si session";
  6. }
  7. ?>

Asin creo que esta bn
  #6 (permalink)  
Antiguo 21/08/2012, 10:36
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Una página no me mantiene la session

Cita:
Iniciado por PepeF Ver Mensaje
¿?
Sorry

Código PHP:
Ver original
  1. <?php  
  2. if(empty($_SESSION['IdUsuario'])){
  3. echo "No Session";
  4. else{
  5. echo "Si session";
  6. }
  7. ?>

Asin creo que esta bn
con estos codigos que estas dando que intentas conseguir ?? solucionar su problema ?? si es asi lo veo dificil ?? lee su mensaje bien para que comprendas la situacion

segun el a veces si le crea la session y a veces no con tu script solo conseguira ver a veces no session y otras si session na mas
  #7 (permalink)  
Antiguo 21/08/2012, 11:34
 
Fecha de Ingreso: julio-2012
Mensajes: 276
Antigüedad: 12 años, 3 meses
Puntos: 27
Respuesta: Una página no me mantiene la session

Am ok gracias.
  #8 (permalink)  
Antiguo 21/08/2012, 11:51
 
Fecha de Ingreso: abril-2010
Mensajes: 31
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Una página no me mantiene la session

Sí, es extraño.

El id del usuario lo guardo cuando inicio sesión, y con eso igresa al menú.

agregar auto
ver lista autos

doy a ver lista autos todo bien, me muestra el listado, pero cuando doy click a uno de esos en la lista, la página ver_auto.php es la que no encuetra la sesion.

Hice un var_dump($_SESSION) y me imprime array(0){}
Pero ese mismo var_dump en lista_autos.php me imprime todo el array de sesion.

Y la otra es que si me deslogueo y me vuelvo a loguear todo funciona de maravilla.
  #9 (permalink)  
Antiguo 21/08/2012, 12:03
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Una página no me mantiene la session

(1) comprueba que no generes html antes de session_start() , elimina espacios, saltos de linea , lo primerito session_start(); suele ser un fallo comun , mira haber para ir descartando

(2)pasas de verlistaautos a una pagina donde muestras la lista y al pulsar en ver es en esa pagina donde no encuentra la session?? podemos ver como lo haces ??

es un poco raro que una vez deslogueado y despues loguearte valla como la seda prueba eso mismo pero elimina las cookies manualmente todas y vuelve a probar despues ,deslogueate elimina todo y vuelve a iniciar session

Última edición por webankenovi; 21/08/2012 a las 12:09
  #10 (permalink)  
Antiguo 21/08/2012, 12:19
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Una página no me mantiene la session

(3)de que manera eliminas las cookies??

(4) de que maneras accedes a dicha pagina con un link formulario header¿?

(4) prueba esta solucion

lo que debes confirmar por otros médios es que tu Navegador no esté bloqueando dicha cookie o alguna barra instalada en tu navegador que suele tener esas funcionalidades, o algún antivirus... etc.....

Si quieres hacer una prueba .. propaga la $_SESSION en el URL desde la pagina que funca a la que no funca

header('Location: pagina.php?var='. $_SESSION['IdUsuario']);

y en la pagina donde esta el problema al redireccionar comprueba que llega el valor por url

Si así te funcionan las sesiones correctamente, el problema lo tienes en las cookies


prueba todo esto y me cuentas
__________________

Última edición por webankenovi; 21/08/2012 a las 12:52
  #11 (permalink)  
Antiguo 21/08/2012, 14:18
 
Fecha de Ingreso: abril-2010
Mensajes: 31
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Una página no me mantiene la session

Cita:
(1) comprueba que no generes html antes de session_start() , elimina espacios, saltos de linea , lo primerito session_start(); suele ser un fallo comun , mira haber para ir descartando
No, nanáis. session_start es lo primero y no hay espacios en blanco

(2)pasas de verlistaautos a una pagina donde muestras la lista y al pulsar en ver es en esa pagina donde no encuentra la session?? podemos ver como lo haces ??

Código PHP:
<?php /*Busco en base de datos la lista y la regreso como un array de objetos*/
foreach($lista_autos as $auto): ?>

<li>www.ejemplo.com/ver_auto.php?IdAuto=<?php echo $auto->id;?></li>

<?php endforeach; ?>
Al dar click al link llego a la pagina ver autos.

Cita:
(3)de que manera eliminas las cookies??
Supongo que esto se hace cuando cierro sesión. Lo hago con session_destroy();

Cita:
(4) de que maneras accedes a dicha pagina con un link formulario header¿?
Con un link, el que genero en la lista de autos.

Cita:
(4) prueba esta solucion

lo que debes confirmar por otros médios es que tu Navegador no esté bloqueando dicha cookie o alguna barra instalada en tu navegador que suele tener esas funcionalidades, o algún antivirus... etc.....

Si quieres hacer una prueba .. propaga la $_SESSION en el URL desde la pagina que funca a la que no funca
Tampoco funciona en otros navegadores, ni en otras máquinas, así que dudo que sea esto.

Seguiré revisando, en última instancia, borraré la página y la volveré a hacer.
  #12 (permalink)  
Antiguo 21/08/2012, 15:04
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años, 6 meses
Puntos: 528
Respuesta: Una página no me mantiene la session

Checa la codificación del archivo, que sea utb, no vaya a ser el problema por ese rumbo.
  #13 (permalink)  
Antiguo 22/08/2012, 10:56
 
Fecha de Ingreso: abril-2010
Mensajes: 31
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Una página no me mantiene la session

Sigo con mi problema. Haciendo pruebas a lo loco me di cuenta que en esta página el session_id() es totalmente diferente,

en las páginas index, lista_autos, contacto y demás me imprime

39b3843ba0eb32b37d334136158116e9

pero en la pagina ver_auto me imprime

193c7c3040d82c901b492e81a5103c1b

Se que con eso tengo una pista pero aún no llego a la solución. Seguiré buscando.
  #14 (permalink)  
Antiguo 22/08/2012, 11:21
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Una página no me mantiene la session

podemos ver la parte donde autentificas al usuario y creas las sessiones

¿que sessiones creas para el usuario? con que valores?
  #15 (permalink)  
Antiguo 22/08/2012, 11:40
 
Fecha de Ingreso: junio-2010
Ubicación: Venezuela, Zulia
Mensajes: 686
Antigüedad: 14 años, 4 meses
Puntos: 55
Respuesta: Una página no me mantiene la session

en la pagina anterior a la que te bota la session, no incluyes algún otro archivo

ej: include_once('archivo.php');
__________________
<?php echo "No te metas a lo hondo del Mar si no sabes nadar, primero aprende a nadar" ?>
...Error en linea: 1 o.O
  #16 (permalink)  
Antiguo 22/08/2012, 11:41
 
Fecha de Ingreso: abril-2010
Mensajes: 31
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Una página no me mantiene la session

El login lo hago por ajax, esta es la página que los autentica

Código PHP:
if (isset($_POST['Email'])) 
   
$nick $_POST['Email'];
if (isset(
$_POST['Clave']))
   
$pass $_POST['Clave'];

/*Busco los datos del usuario en db*/
$usuarios =  $mysql_fetch_obj($resultado);
if(
count($usuarios) > 0)  
{
$data_usuarios $usuarios[0];
$_SESSION['IdUsuario']       = $data_usuarios ->IdUsuario;
$_SESSION['Nombre']          = $data_usuarios ->Nombre;
$_SESSION['Apellido']        = $data_usuarios ->Apellido;
$_SESSION['Tipo']            = $data_usuarios ->Tipo;
$_SESSION['Pais']            = $data_usuarios ->Pais;
$_SESSION['MM_Habilitado'] = 1;
        
$conectado true;
}else{
        
$conectado false;
}    

echo 
json_encode(array("conectado"=>$conectado)); 
__________________________

Ahora ya vi lo que está pasando, y al menos ya logro entender por qué solo sucede la primera vez.

Lo que está pasando es así:
  1. Voy a ejemplo.com/index.php tengo session_id() 123
  2. hago login, el formulario regresa true, todos los dados quedan en $_SESSION y me da acceso al menú. Hasta aquí perfecto.
  3. Voy a lista_autos.php aún tengo session_id() 123 así que todos los datos siguen en $_SESSION, hasta aquí perfecto.
  4. Doy click a uno de los autos y eso me lleva a ver_auto.php, por alguna razón esta página me crea una sesion nueva con el id 456, y por eso no encuentra los datos en sesion, entonces me saca y me redirige a index.php, el cual tiene ahora session_id 456 y por eso aparezco deslogueado.
  5. Me logueo nuevamente, los datos vuelven a quedar guardados pero ahora con el id 456
  6. Repiro el proceso y ahora cuando llego a ver_auto.php se mantiene el id 456 porque fue el que esta misma página generó y entonces todos mis datos están ahí. Por eso la segunda vez funciona perfecto.

Ahora necesito averiguar por qué ver_autos.php me está creando una sesión nueva con id 456 en lugar de mantener la anterior con id 123.
  #17 (permalink)  
Antiguo 22/08/2012, 11:44
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Una página no me mantiene la session

por que en el punto 4 al loguearte nuevamente no te vuelve a crear una session nueva y la anterior vez si??? esa es la cuestion??

prueba pasando otra session diferente a idusuario y haber que pasa

5. puede ser que no estes eliminado bien las sessiones por eso la primera vez te falla

prueba este codigo que te va a eliminar todo en el logout.

Código PHP:
Ver original
  1. puedes verlo completo en http://php.net/manual/es/function.session-destroy.php
  2.  
  3. <?php
  4. // Inicializar la sesión.
  5. // Si está usando session_name("algo"), ¡no lo olvide ahora!
  6.  
  7. // Destruir todas las variables de sesión.
  8. $_SESSION = array();
  9.  
  10. // Si se desea destruir la sesión completamente, borre también la cookie de sesión.
  11. // Nota: ¡Esto destruirá la sesión, y no la información de la sesión!
  12. if (ini_get("session.use_cookies")) {
  13.     $params = session_get_cookie_params();
  14.     setcookie(session_name(), '', time() - 42000,
  15.         $params["path"], $params["domain"],
  16.         $params["secure"], $params["httponly"]
  17.     );
  18. }
  19.  
  20. // Finalmente, destruir la sesión.
  21. ?>

ahora logueate deslogueate y vuelve a probar
  #18 (permalink)  
Antiguo 22/08/2012, 11:58
 
Fecha de Ingreso: abril-2010
Mensajes: 31
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Una página no me mantiene la session

Cita:
Iniciado por johhan16 Ver Mensaje
en la pagina anterior a la que te bota la session, no incluyes algún otro archivo

ej: include_once('archivo.php');
Pues sí, incluyo varios: todas las clases que ocupo, header y footer.


Cita:
por que en el punto 4 al loguearte nuevamente no te vuelve a crear una session nueva y la anterior vez si??? esa es la cuestion??
No, la pregunta es por qué en el punto 4 me está creando una sesion nueva en lugar de mantenerla la que ya venía de las páginas anteriores.

Cita:
5. puede ser que no estes eliminado bien las sessiones por eso la primera vez te falla

prueba este codigo que te va a eliminar todo en el logou
Voy a probar, pero no creo que tenga nada que ver con el logout, estamos hablando que es la primera vez que me he logueado, recién abro el navegador y entro a mi sitio. No he pasado por logout en ningún momento cuando el error ocurre.
  #19 (permalink)  
Antiguo 22/08/2012, 12:01
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Una página no me mantiene la session

has probado pasando otra session diferente a idusuario???

Código PHP:
Ver original
  1. <?php
  2. if(!isset($_SESSION['MM_Habilitado'])) { header('location:denied.php'); }
  3. else{
  4.   //funcionalidad aquí
  5. }
  6. ?>
  #20 (permalink)  
Antiguo 22/08/2012, 12:17
 
Fecha de Ingreso: junio-2010
Ubicación: Venezuela, Zulia
Mensajes: 686
Antigüedad: 14 años, 4 meses
Puntos: 55
Respuesta: Una página no me mantiene la session

Pues debes fijarte si en algún include no hagas que te saque del sistema, a mi una vez me paso y era problema en un include, estaba que me volvía loco
__________________
<?php echo "No te metas a lo hondo del Mar si no sabes nadar, primero aprende a nadar" ?>
...Error en linea: 1 o.O
  #21 (permalink)  
Antiguo 22/08/2012, 12:21
 
Fecha de Ingreso: abril-2010
Mensajes: 31
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Una página no me mantiene la session

Cita:
has probado pasando otra session diferente a idusuario???
No pero ya había hecho un var_dump a $_SESSION, y me imprimía: array(0){}
________________

Al final di con la solucion gracias a un post en el sitio de php.net que iba así:

Cita:
I was having problems with $_SESSION information not being written or being lost in a seemingly random way. There was a Location: call being made deep in a Zend OAuth module, I am using an IIS server with PHP as a CGI, etc.

The answer was simply that you need to have the domain be consistent for sessions to work consistently. In my case, I was switching back and forth between www.EXAMPLE.com:888 and EXAMPLE.com:888. The unusual port, the hidden Location: call, the handoff with OAuth, etc all served to confuse me, but the intermitent error was caused by this simple goof of keeping the domain consistent.
El problema está en que mi menú tenía los enlaces hacia www.ejemplo.com, pero en los link de la lista de autos iba hacia ejemplo.com/ver_auto.php

Por supuesto, al ser dos dominios diferentes, se iban a manejar con sesiones diferentes.

La solución fue mantener la consistencia en los links, todos hacia www.ejemplo.com
________________________

Si algún mod ve esto, ya puede cerrar y marcar como resuelto.

Última edición por Mosazu; 22/08/2012 a las 12:24 Razón: está resuelto.
  #22 (permalink)  
Antiguo 22/08/2012, 12:28
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Una página no me mantiene la session

si ese es tu proble puedes modificar session.name y session.cookie_domain en modo de ejecucion para asegurar el perfecto funcionamiento ya que todas las sessiones seran creadas con el nombre de tu dominio

http://php.net/manual/es/function.session-name.php
http://www.php.net/manual/es/session....cookie-domain

session_name("www.ejemplo.com"); // no tiene por que ser tu dominio

session_cookie_domain("www.ejemplo.com");
  #23 (permalink)  
Antiguo 22/08/2012, 12:39
 
Fecha de Ingreso: abril-2010
Mensajes: 31
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Una página no me mantiene la session

Cita:
si ese es tu proble puedes modificar session.name y session.cookie_domain en modo de ejecucion para asegurar el perfecto funcionamiento ya que todas las sessiones seran creadas con el nombre de tu dominio

http://php.net/manual/es/function.session-name.php
http://www.php.net/manual/es/session....cookie-domain

session_name("www.ejemplo.com"); // no tiene por que ser tu dominio

session_cookie_domain("www.ejemplo.com");
Otro buen detalle a tomar en cuenta. Gracias.

Etiquetas: página, session, usuarios
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 13:04.