Foros del Web » Programando para Internet » PHP »

problemas con las sesiones

Estas en el tema de problemas con las sesiones en el foro de PHP en Foros del Web. Hola, buenas a todos. Estoy comenzando con php y ahora mismo tengo un problema con las sesiones. Estoy realizando una página web y necesito guardar ...
  #1 (permalink)  
Antiguo 14/11/2004, 20:55
 
Fecha de Ingreso: noviembre-2004
Mensajes: 47
Antigüedad: 13 años, 1 mes
Puntos: 0
problemas con las sesiones

Hola, buenas a todos. Estoy comenzando con php y ahora mismo tengo un problema con las sesiones.
Estoy realizando una página web y necesito guardar la intimidad de los usuarios q acceden a consultar/modificar sus datos. He creado un primer script "index_usuario.php" donde aparece un formulario para q cada usuario se identifique. Luego mando los datos a otro script "menuAlumno.php" donde compruebo q el usuario exista en la BD y q muestre un formulario cubierto con los datos del mismo.
El problema q tengo es q si le doy a Atrás en el explorador me dice q la página ha caducado pero si le doy al botón de actualizar me vuelven a aparecer todos los datos del usuario. ¿Cómo puedo evitar esto?. Adjunto el código de mis scripts por si me podéis echar una mano y veis el error.
Otra cosa. En el script para cerrar sesión, no sé si me he pasado "destruyendo" cosas. Sería necesario todo ese código para cerrar una sesión?
Un saludo y gracias de antemano.


<?/********** " index_usuario.php"

<? session_start(); ?>

<HTML>
<HEAD>
<TITLE>Bienvenido a CorreoLab</TITLE>
</HEAD>
<BODY bgcolor="#cccccc">
<?

function formulario($login, $password){
***} //FIN FORMULARIO

function chequear($login,$password){
***} // FIN CHEQUEAR

if(!isset($aceptar_form)){
formulario($login,$password);
}
else{
chequear($login,$password);
include("cerrar_sesion_isset.php");
formulario($login,$password);
}
?>

<BR><div align="center">Si eres un usuario nuevo, <a href="alumno_peticion.php">REGISTRATE</a></div>

</BODY>
</HTML>

******************************
******* "menuAlumno.php"
<?
session_start();
$_SESSION["login"]=$login;
$_SESSION["password"]=$password;
?>

<HTML>
<HEAD>
<TITLE>Modificar</TITLE>
</HEAD>

<BODY bgcolor="#cccccc">

<?
include("conexionBD.php");
$ok=0;
$tipo="alu";
$consulta="select login,pass,tipo from usuarios;";
$resul=mysql_query($consulta);
while ($row = mysql_fetch_array($resul)){
if (($login==$row[0])&&($password==$row[1])&&($tipo==$row[2])){
$ok=1;
break;
}
}

if ($ok){ //PRINCIPAL
$login=$row[0];
echo "<BR>",'<div align="center"><font size=3 color ="#000080"><b>HOLA '.$row[0].'. BIENVENIDO A LABMAIL</b></font></div>';
echo '<div align="center">';

//Conexion con la base
include("conexionBD.php");

//DECLARACIÓN DE FUNCIONES

****


//CUERPO DEL PROGRAMA

if(!isset($aceptar_form)){
recuperar($nom,$ape,$dni,$mail,$login,$passw);
formulario($nom,$ape,$dni,$dni,$mail,$login,$passw ,$passw);
}
else{
chequear($nombre,$apellidos,$dni,$dni2,$email,$log in,$password,$passconf);
}
?>
<BR><div align="center"><a href="cerrar_sesion_isset.php">Cerrar sesión</a></div>
<?
} //FIN PRINCIPAL
else{
session_destroy();
echo "<BR>",'<div align="center">Ha ocurrido un error.<br>Escriba correctamente su nombre de usuario y contraseña</div>';
echo "<BR>",'<div align="center"><a href="index_usuario.php">Volver</a></div>';
}
?>

</BODY>
</HTML>

******************************
******** "cerrar_sesion_isset.php"
<?
session_start();
unset($_SESSION['login']);
unset($_SESSION['password']);
$_SESSION = array();
session_destroy();
echo '<HTML><HEAD><TITLE>Modificar</TITLE></HEAD>
<BODY BGCOLOR="#CCCCCC">
<BR><div align="center">YA NO ESTAS LOGUEADO</div>
<BR><div align="center"><a href="indice.htm">SALIR</a></div>';
?>

</BODY>
</HTML>


*/?>
  #2 (permalink)  
Antiguo 14/11/2004, 21:38
Avatar de chr_c  
Fecha de Ingreso: junio-2003
Mensajes: 204
Antigüedad: 14 años, 6 meses
Puntos: 0
uffff, que codigo complicado , pero aparentemente a simple vista esta bien. El unico tema que no tenes en cuenta es el browser y las cabeceras http:. Veamos un poco como seria correcto. Fundamental para que sea prolijo , eficiente y no te compliques demasiado, es usar el funcion header(), es decir forzar el redireccionamiento a otras paginas segun lo que ocurra, esta es una muy buena forma de evitar los "atras" de los usuarios, ya que cuando haces atras en el browser y te dice "tu sesion ha caducado" y le das actualizar, el browser tratara en todo momento de reenviar toda la informacion (tanto POST, GET y COOKIES ) que xistiera en la pagina anterior.
Aque voy con esto, es un poco de orden para ahcer bien las cosas.

1- formulario de login.
este mismo debe consultar en la BD, si el usuario existe guardo una varibale de sesion y header(otra pagina). sino session destroy.
2 en el resto de las paginas preguntas por "alguna variable" y que ya hayas guardado como variable de sesion que creas en 1 luego del ok de la BD.

De esta forma, si la variable no existe no se validara la sesion, y aunque el usuario haga "atras" si tu borraste la variable no tiene de donde encontrarla ya que solo la creo la primera pagina de login.

Espero haber sido claro.
Suerte.

Última edición por chr_c; 14/11/2004 a las 21:40
  #3 (permalink)  
Antiguo 14/11/2004, 22:06
 
Fecha de Ingreso: noviembre-2004
Mensajes: 47
Antigüedad: 13 años, 1 mes
Puntos: 0
De acuerdo

Muchas gracias chr_c. Como ya dije, estoy bastante verde en el asunto pero creo q he pillado la idea. 1º, y en un único script, q se loguee el usuario y, si existe, creo una vble de sesión la cuál compararé durante el resto de páginas para asegurarme de q estoy trabajando con ese usuario. Algo así, no?
Lo de los headers tengo q mirarlo aún pq nunca he trabajado con ello.

Muchísimas gracias de nuevo.
  #4 (permalink)  
Antiguo 15/11/2004, 08:13
Avatar de chr_c  
Fecha de Ingreso: junio-2003
Mensajes: 204
Antigüedad: 14 años, 6 meses
Puntos: 0
ok, esa es la idea. Ademas lo primero que haces en cada pagina es ver si la variables existe y si no automaticamente destruyes la session y lo redireccionas a la pagina de login
  #5 (permalink)  
Antiguo 15/11/2004, 17:49
 
Fecha de Ingreso: noviembre-2004
Mensajes: 47
Antigüedad: 13 años, 1 mes
Puntos: 0
De acuerdo

Nota mental: redireccionar páginas.
¡¡Cuántas cosas me quedan por aprender!!
JAJAJAJAJA. Muchas gracias de nuevo.
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:53.