miércoles, 11 de enero de 2012

28. Práctica - Solución

Hola, ¿qué hay? Que tal con la práctica, era sencilla, ¿no? Voy a dar la solución a la práctica pero es de una aplicación realizada por un compañero y amigo Javier Martín un gran seguidor de este blog y por lo que se lo agradezco un montón, me envió el código y esta es su solución a la práctica que os propuse. Aquí la tabla con los datos insertados:

Y vamos con la apariencia del archivo registro.php en el navegador:

 
Cuyo código es el siguiente:
<?
session_start();

if ($usuarioid && $password)
{
  // Si el usuario ha intentado hacer log in

  $db_conn = mysql_connect("localhost", "root", "");
  mysql_select_db("registro", $db_conn);
  $query = "select * from registro "
           ."where usuario='$usuario' "
           ." and password='$password')";
  $result = mysql_query($query, $db_conn);
  if (mysql_num_rows($result) >0 )
  {
    // si están en la base de datos registra la id de usuario
    $valido_usuario = $usuarioid;
    session_register("valido_usuario");
  }
}
 
  {
    // si están en la base de datos registra la id de usuario
    $valido_usuario = $usuarioid;
    session_register("valido_usuario");
  }
}
?>
<html>
<body>
<h1>Página Inicio</h1>
<?

  if (session_is_registered("valido_usuario"))
  {
    echo "Ahora estás logeado como: $valido_usuario <br>";
    echo "<a href=\"logout.php\">Cierra sesión</a><br>";
  }
  else
  {
    if (isset($usuarioid))
    {
      // si han intentado hacer login y ha fallado
      echo "No has podido hacer login";
    }
    else
    {
      // si no han intentado hacer login  y no han hecho logged out
      echo "No has hecho login.<br>";
    }

    // provee el formulario para hacer  log in
    echo "<form method=post action=\"registro.php\">";
    echo "<table>";
    echo "<tr><td>Usuario:</td>";
    echo "<td><input type=text name=usuarioid></td></tr>";
    echo "<tr><td>Contraseña:</td>";
    echo "<td><input type=password name=password></td></tr>";
    echo "<tr><td colspan=2 align=center>";
    echo "<input type=submit value=\"Log In\"></td></tr>";
    echo "</table></form>";
  }
?>
<br>
<a href="miembros.php">Sección de Usuarios Registrados</a>
</body>
</html>
En la parte inicial del código lo que hace es conectarse a la base de datos para llevar a cabo el intercambio de los datos. Y la otra parte del código se lleva a cabo la acción de intentar logearse. Pero en general para entender cómo funciona este tipo de scripts hay que centrarse en que se mueve en torno a la variable de sesión que aquí denominamos valido_usuario. La idea básica es que si alguien se identifica correctamente lo registramos con una variable de usuario y una variable de sesión a la que llamamos valido_usuario y que contenga su id. Por tanto, será como su carné de identidad durante todo el tiempo que esté en la sesión que nos permite tener identificado al usuario pero sin embargo no tener que estar haciendo publico su información, lo único que se ve en el navegador es su usuarioid mientras que la otra información dependerá del navegador.
Lo primero que hacemos en este script es llamar a session_start() con lo que se cargará las variables de sesión, en este caso usuarioid si ha sido registrado, pero observa que en los otros scripts de la aplicación también empezamos con session_start(). De este modo, en caso de que exista la sesión iniciada y con una variable valido_usuario registrada haremos que esté presente en los demás scripts de la aplicación. Resumiendo cuando esa persona quiera logearse y cubra el formulario y pulse sobre el botón el script es reinvocado de nuevo al mismo script registro.php y tendremos un usuarioid y un password para intentar autentificar y almacenar comparándolos con los datos de la base de datos. 
Si insertamos en el formulario los datos mal nos sale el siguiente mensaje:

 
Si hacemos clic en el vínculo Sección de Usuarios Registrados sin estar registrados nos aparece lo siguiente:

 
Volvemos a la página principal y ahora insertamos los datos correctamente:

 
Si nos vamos a la sección de usuarios registrados:

Y si cerramos sesión:

Esto es lo que hace esta sencilla aplicación. El código del archivo miembros.php es el siguiente:
<?
  session_start();

  echo "<h1>Sólo Usuarios Registrados</h1>";

  // comprobar variables de sesión

  if (session_is_registered("valido_usuario"))
  {
    echo "<p>Estás logeado como $valido_usuario.</p>";
    echo "<p>Contenido sólo para usuarios registrados</p>";
  }
  else
  {
    echo "<p>No estás logeado.</p>";
    echo "<p>Sólo los usuarios registrados pueden ver esta página.</p>";
  }

  echo "<a href=\"registro.php\">Volver a la página principal</a>";
?>
Este código empieza naturalmente con session_start y comprueba que el usuario está correctamente registrado con la función session_is_registered con la variable valido_usuario en forma de string.
Y el código de logout.php:
<?
  session_start();

  $old_usuario = $valido_usuario;  // almacenado para comprobar si ellos estuvieron logged in
  $result = session_unregister("valido_usuario");
  session_destroy();
?>
<html>
<body>
<h1>Cerrar sesión</h1>
<?
  if (!empty($old_usuario))
  {
    if ($result)
    {
      // si estuvieron logged in y no están logged out
      echo "Logged out.<br>";
    }
    else
    {
     // Estaban logged in y no pueden  logged out
      echo "No se ha podido cerrar la sesión.<br>";
    }
  }
  else
  {
    // si ellos no estaban registrados pero llegan a esta página de algún modo
    echo "No estás logeado, y por tanto no puedes cerrar sesión.<br>";
  }
?>
<a href="registro.php">Volver a la página principal</a>
</body>
</html>
Este script sirve para que un usuario salga del sistema. Empezamos con session_start, hacemos una comparación con el viejo nombre de usuario con la variable valido_usuario que desaparecerá con la función session_unregister y posteriormente destruimos la sesión con session_destroy().
Hasta aquí el post de hoy, en el próximo hablaré sobre las cookies. De momento esto es todo. Abrazoooos

No hay comentarios:

Publicar un comentario