Foros del Web » Programando para Internet » PHP »

problema para mantener sesion activa

Estas en el tema de problema para mantener sesion activa en el foro de PHP en Foros del Web. Buenas a todos, tengo un problema para mantener la sesion de los usuarios activa En cada pagina PHP, tengo lo siguiente: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: ...
  #1 (permalink)  
Antiguo 21/02/2011, 09:27
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años, 6 meses
Puntos: 27
problema para mantener sesion activa

Buenas a todos, tengo un problema para mantener la sesion de los usuarios activa

En cada pagina PHP, tengo lo siguiente:

Código PHP:
Ver original
  1. require_once('funciones.php');
  2. $_SESSION['cedula'] = $cedula;
  3. ?>

siendo $cedula, la variable de sesion que identifica a cada usuario

El problema lo tengo en un enlace de mi menu que lo defino asi:

funciones.php:

Código PHP:
Ver original
  1. function menu_egresado(){
  2.  
  3. ?>
  4. <ul id="nav">
  5.   <li> <a href="formulario_egresado.php?optegresado=<?php echo $_SESSION["cedula"];?>">Inicio</a></li>
  6.   <li> <a href="cuenta.php?optegresado=<?php echo $_SESSION["cedula"];?>">Mi cuenta</a></li>
  7.     <li><a href="logout_egre.php">Finalizar sesion</a></li>
  8.     </ul>
  9.    
  10.   <?
  11.  
  12. }
Sucede lo siguiente: cuando el usuario se loguea es enviado a formulario_egresado?optegresado

Tengo unas imagenes para acceder a contenidos y como tal la sesion se mantiene activa

Entrando a otras paginas y devolviendome a Inicio y Cuenta la sesion se mantiene activa, pero el problema es cuando estando en formulario_egresado.php entro a cuenta.php, inmediatamente la sesion se desactiva.

Cual es el problema?...en cada pagina php tengo el mismo encabezado, he puesto el enlace de varias formas:

Código PHP:
Ver original
  1. <a href="cuenta.php?<? $_SESSION["cedula"]; ?>">Mi cuenta</a>

Código PHP:
Ver original
  1. <a href="cuenta.php?optegresado=<? $_SESSION["cedula"]; ?>">Mi cuenta</a>

Pero con ninguna de las dos formas me funciono.

Pasandole como parametro la variable de sesion, pero como os digo, estando en formulario_egresado.php, hago clic para entrar a cuenta.php y se borra la sesion...
Solo sucede en ese enlace, en los otros no

Agradezco alguien que me pueda colaborar...
  #2 (permalink)  
Antiguo 21/02/2011, 09:36
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 9 meses
Puntos: 288
Respuesta: problema para mantener sesion activa

Hola primero que nada no tenes que andar pasando una variable de sesion de pagina en pagina.
una (y unica) vez declarada su valor solo necesitas poner en cada pagina session_start().
A menos que le asignes un nuevo valor a la variable esta no cambiara
  #3 (permalink)  
Antiguo 21/02/2011, 09:54
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años, 6 meses
Puntos: 27
Respuesta: problema para mantener sesion activa

Ok, he dejado solo la variable de sesion declarada en formulario_egresado.php

Pero sigue el mismo problema....Lo mas raro es que si estando en formulario_egresado.php, entro a otros enlaces, la sesion esta activa...

pero si estoy en formulario_egresado.php y entro a cuenta.php. la sesion se desactiva

Porque?
  #4 (permalink)  
Antiguo 21/02/2011, 10:00
 
Fecha de Ingreso: diciembre-2010
Ubicación: valencia
Mensajes: 203
Antigüedad: 13 años, 11 meses
Puntos: 11
Respuesta: problema para mantener sesion activa

pues pon el codigo fuente de cuenta ya que segun tu esta ahi el problema.
  #5 (permalink)  
Antiguo 21/02/2011, 10:24
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años, 6 meses
Puntos: 27
Respuesta: problema para mantener sesion activa

Bueno aca va:
cuando el usuario se va a loguear el boton submit va a:

autenticacion.php

Código PHP:
Ver original
  1. <?
  2. require_once('funciones.php');
  3. $usuario=$_POST['usuario'];
  4. $clave=$_POST['clave'];
  5.  
  6. if (login_in($usuario, $clave)==1)
  7. {
  8.    
  9.     if ($usuario=="admin"){
  10.         $_SESSION['valid_user'] = $usuario;
  11.         header("Location: administracion.php");
  12.     }
  13.     else
  14.     {
  15.         $_SESSION['estud'] = $usuario;
  16.         header("Location: formulario_egresado.php?optegresado=$usuario");
  17.  
  18.     }
  19. }
  20. else
  21. {
  22.  
  23. echo 'No hay logueo';
  24.  
  25. }  
  26. ?>

en funciones.php tengo la conexion a la base de datos, y los menus creados (para administrador y egresado)

funciones.php:

Código PHP:
Ver original
  1. <?
  2. function conectar( $baseDatos ){
  3.     $sock = mysql_connect("localhost", "root", "root");
  4.    
  5.     if ( !$sock )
  6.         die ("Error al conectarse al servidor");
  7.        
  8.     if ( !mysql_select_db( $baseDatos, $sock ) )
  9.         die ("Error al seleccionar la base de datos");
  10.        
  11.     return $sock;
  12. }
  13. function menu_egresado(){
  14.  
  15. ?>
  16.  
  17.         <ul id="nav">
  18.       <li> <a href="formulario_egresado.php?optegresado=<?php echo $_SESSION["cedula"];?>">Inicio</a></li>
  19.      
  20.           <li> <a href="cuenta.php?optegresado=<?php echo $_SESSION["cedula"];?>">Mi cuenta</a></li>
  21.          
  22.              
  23.         <li><a href="logout_egre.php">Finalizar sesion</a></li>
  24.     </ul>
  25.    
  26.  
  27. }
  28. ?>

ahora en formulario_egresado.php tengo:
Código PHP:
Ver original
  1. require_once('funciones.php');
  2. $_SESSION['cedula'] = $cedula;
  3. if (isset($_SESSION['estud']))
  4. {
  5. ?>
  6. <html>
  7. <head>
  8. </head>
  9. <body>
  10. //muestro el menu
  11.  
  12.  <? menu_egresado(); ?>
  13.  
  14. //omito codigo porque aca hago una consulta sql
  15.  
  16. </body>
  17. </html>
  18. <?
  19. }
  20. else
  21. {
  22. not_auth();
  23. }
  24. ?>

Ahora en cuenta.php tengo:


Código PHP:
Ver original
  1. require_once('funciones.php');
  2.  
  3. if (isset($_SESSION['estud']) )
  4. {
  5. ?>
  6.  
  7. <html>
  8. <head>
  9. </head>
  10. <body>
  11.  
  12.  <? menu_egresado(); ?>
  13.  
  14. </body>
  15. </html>
  16. <?
  17. }
  18.  
  19.  
  20. else
  21. {
  22. not_auth();
  23. }
  24. ?>

Ese es el codigo, omito HTML

Ahora, cual puede ser el problema de mi codigo?
  #6 (permalink)  
Antiguo 21/02/2011, 10:36
 
Fecha de Ingreso: diciembre-2010
Ubicación: valencia
Mensajes: 203
Antigüedad: 13 años, 11 meses
Puntos: 11
Respuesta: problema para mantener sesion activa

es un cacao leer todo el codigo, pero bueno ¿de donde sale $cedula?
  #7 (permalink)  
Antiguo 21/02/2011, 10:38
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años, 6 meses
Puntos: 27
Respuesta: problema para mantener sesion activa

$cedula es la variable de sesion que idenfica a cada usuario, como tal es la llave primaria de mi tabla
  #8 (permalink)  
Antiguo 21/02/2011, 10:40
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años, 6 meses
Puntos: 27
Respuesta: problema para mantener sesion activa

haciendole un echo a $cedula, me muestra el numero que identifica a cada persona....por tal motivo decidi dejarlo como mi variable de sesion
  #9 (permalink)  
Antiguo 21/02/2011, 10:47
 
Fecha de Ingreso: diciembre-2010
Ubicación: valencia
Mensajes: 203
Antigüedad: 13 años, 11 meses
Puntos: 11
Respuesta: problema para mantener sesion activa

pues no veo donde asignas valor a $cedula. pon un ejemplo en un solo fichero que reproduzca tu error. date cuenta que es mas comodo para la gente que te lee.
  #10 (permalink)  
Antiguo 21/02/2011, 11:22
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años, 6 meses
Puntos: 27
Respuesta: problema para mantener sesion activa

Pues error no me vota, eso es lo raro...manejand los enlaces con imagenes la sesion no se pierde
asi lo hago con una imagen:

Código PHP:
Ver original
  1. <form action="mis_datos.php" method="get" name="form2" id="form2">
  2.   <input type="image" src="imagenes/user_256.png" height="180"  width="215"  onClick="javascript:form2.submit()" />
  3.              <input readonly name="cedula" type="hidden" id="cedula"  value="<? echo $fila_data["NUM_CED_EGR"]; ?>">
  4.             </form>

cedula es el valor que toma de la caja de texto cedula, el cual se muestra por medio de una consulta...

sin embargo para ir a cuenta.php no utilizo una imagen sino un enlace asi:

Código PHP:
Ver original
  1. <a href="cuenta.php?optegresado=<?php echo $_SESSION["cedula"];?>">Mi cuenta</a>

Podria dejar el enlace tipo submit? es decir, asignarle un <form action="cuenta.php"> ?

y pasarle como parametro el campo cedula?
  #11 (permalink)  
Antiguo 21/02/2011, 12:04
 
Fecha de Ingreso: diciembre-2010
Ubicación: valencia
Mensajes: 203
Antigüedad: 13 años, 11 meses
Puntos: 11
Respuesta: problema para mantener sesion activa

la verdad que cada vez entiendo menos. pon en cada pagina print_r($_SESSION) para localizar donde falla y activa el reporte de errores para que muestre todo.
  #12 (permalink)  
Antiguo 21/02/2011, 12:13
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años, 6 meses
Puntos: 528
Respuesta: problema para mantener sesion activa

Un comentario:
el session_start() debe ser la primer linea en cualquier archivo, según el código que pones, en autenticacion.php primero haces un require_once('funciones.php'); y luego la sesión, lo cual es incorrecto.
  #13 (permalink)  
Antiguo 21/02/2011, 12:39
Avatar de p414  
Fecha de Ingreso: agosto-2009
Ubicación: casi casi casi... a un lado de la cuna...
Mensajes: 575
Antigüedad: 15 años, 2 meses
Puntos: 44
Respuesta: problema para mantener sesion activa

ohhhh ocp001a me has ganado,. la funcion session_start() debe estar en la primer linea del codigo, no debe estar debajo de require_once() como tu lo tienes en autenticacion.php, prueba eso
  #14 (permalink)  
Antiguo 21/02/2011, 12:47
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años, 6 meses
Puntos: 27
Respuesta: problema para mantener sesion activa

Bueno he cambiando la linea session_star() al primer lugar, y nada....
en todos los archivos esta en el primer lugar
Pareciera mas un erro en el enlace...pero no le doy al chiste...
Y que raro...navego de inicio a otros lugares (por medio de imagenes), luego regreso a cuenta y la session sigue activa
pero estando en inicio (formulario_egresado.php?optegresado) hago clic en cuenta (cuenta.php) y la sesion se desactiva.....
Por ejemplo tengo cuatro archivos: misdatos.php, mi trabajo.php

Estando en misdatos.php regreso a INICIO (formulario_egresado.php) y entro a Cuenta y la sesion si esta activa, el problema sucede si en primr lugar entro a cuenta
  #15 (permalink)  
Antiguo 21/02/2011, 12:51
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años, 6 meses
Puntos: 27
Respuesta: problema para mantener sesion activa

enrique 4480 colocando <? print_r($_SESSION) ?>, me muestra el numero que identifica a la persona que ha iniciado la sesion asi:

Array ( [estud] => 38251807 [cedula] => 38251807 )

y esto lo muestra igual en todas las paginas
  #16 (permalink)  
Antiguo 21/02/2011, 12:57
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años, 6 meses
Puntos: 27
Respuesta: problema para mantener sesion activa

Muestro todo el codigo de cuenta.php
aclaro algo, con la variable $cedula, hago un query a la base de datos, puede ser ese el problema?
Código PHP:
Ver original
  1. require_once('funciones.php');
  2.  
  3. if (isset($_SESSION['estud']) )
  4. {
  5. ?>
  6.  
  7. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  8. <html xmlns="http://www.w3.org/1999/xhtml">
  9. <head>
  10. <style type="text/css">
  11. @import url(css/css.css);
  12. </style>
  13. <link rel="shortcut icon" type="image/x-icon" href="imagenes/favicon.ico" />
  14. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  15. <title>Cuenta de usuario</title>
  16. <script language="JavaScript" type="text/JavaScript">
  17. function verif(formu)
  18. {   if (formu.c1.value==formu.c2.value)
  19. { alert('las contraseñas coinciden'); return true }
  20.     else
  21. { alert('Las contraseñas no coinciden'); return false }
  22. }
  23. </script>
  24. </head>
  25. <?
  26.  
  27.  
  28. $bd = mysql_connect ("localhost", "root", "root");
  29.     if ( !$bd )
  30.         die ("Error en la conexion con el DBMS");
  31.    
  32.     $base_datos = "egresados";
  33.     if ( !mysql_select_db ($base_datos, $bd) )
  34.         die ("Error seleccionando la base de datos");
  35.    
  36.     $qry = "SELECT NOMBRE, PASSWORD FROM users WHERE NOMBRE = '$cedula'";
  37.     $resultado = mysql_query ($qry, $bd);
  38.    
  39.     if ( !$resultado )
  40.         die ("Error ejecutando la consulta");
  41.    
  42.     $num_filas = mysql_num_rows($resultado);
  43.    
  44.     if ($num_filas > 0){       
  45.         $fila = mysql_fetch_array($resultado);
  46.         }
  47.         ?>
  48.        
  49. <body>
  50.  
  51.   <p>
  52.               <? menu_egresado(); ?>
  53.             </p>
  54.  
  55. Nombre de usuario:
  56.  <input type="text" name="usuario" value="<?php echo $fila["NOMBRE"]?>"/>
  57.  
  58. Password:
  59.  <input type="text" name="pass" readonly="readonly" value="<?php echo $fila["PASSWORD"]?>"/>
  60.  
  61. </body>
  62. </html>
  63. <?
  64. }
  65. else
  66. {
  67. not_auth();
  68. }
  69. ?>
  #17 (permalink)  
Antiguo 21/02/2011, 13:20
 
Fecha de Ingreso: diciembre-2010
Ubicación: valencia
Mensajes: 203
Antigüedad: 13 años, 11 meses
Puntos: 11
Respuesta: problema para mantener sesion activa

si en todas las paginas te muestra el array $_SESSION correctamente, no estas perdiendo las sesiones.
  #18 (permalink)  
Antiguo 21/02/2011, 13:24
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años, 6 meses
Puntos: 528
Respuesta: problema para mantener sesion activa

No es lo mismo $cedula que $_SESSION["cedula"], a menos que uses la segunda, a la variable de sesion cedula no le debe pasar nada.
realiza lo siguiente:
haz un var_dump($_SESSION); después de cada linea de instrucciones de tu archivo sonde pierdes la sesión, así verás en qué linea o momento se pierde.

ejemplo:
var_dump($_SESSION);
if($x<$z){
var_dump($_SESSION);
//tu codigo
var_dump($_SESSION);
}
else{
var_dump($_SESSION);
//tu codigo
var_dump($_SESSION);
}


puede ser molesto pero te asegura rastrear el error linea por linea.
  #19 (permalink)  
Antiguo 21/02/2011, 14:39
Avatar de jheckson  
Fecha de Ingreso: febrero-2011
Ubicación: $VE->Aragua['Maracay']
Mensajes: 109
Antigüedad: 13 años, 9 meses
Puntos: 8
Respuesta: problema para mantener sesion activa

Estube leyendo en el FAQ de sessiones, y creo saber cual es tu problema.


coloca esa linea de codigo antes de usar cualquier header('miarchivo.php');
y con eso forzaras que cualquier asignacion a una variable $_SESSION se lleve a cabo de inmediato, ya que por lo que lei estas guardan la informacion al terminar el script y cuado usas un header no significa que este halla terminado, por lo tanto no guardas la varible session siempre.

Lee el FAQ que alli loo explican mejor...

Espero que te sirva!


[URL="http://www.forosdelweb.com/wiki/PHP:Problemas_al_forzar_descargas/redireccionar_%28p%C3%A9rdida_de_valores_de_$_SESS ION%29"]http://www.forosdelweb.com/wiki/PHP:Problemas_al_forzar_descargas/redireccionar_%28p%C3%A9rdida_de_valores_de_$_SESS ION%29[/URL]
  #20 (permalink)  
Antiguo 21/02/2011, 15:17
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años, 6 meses
Puntos: 27
Respuesta: problema para mantener sesion activa

Gracias por la ayuda...verificare en el FAQ de PHP

Etiquetas: mantener
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 09:01.