jueves, 24 de mayo de 2012

Control de Acceso - Inicio de Sesión

Sesiones

Las sesiones en PHP permiten al programador de páginas web prolongar el uso de información de un usuario a través de accesos subsiguientes, esto permite la creación de páginas web más personalizadas y atractivas, al usuario que accede a nuestro sitio web se le asigna un único nombre de identificación que puede ser almacenado en una cookie y propagado por toda la dirección de nuestro sitio.

Antes de continuar con este documento, es necesario que aclare que el uso de este recurso está ampliamente expuesto en el sitio oficial de PHP o manual en línea de PHP, la dirección es: http://www.php.net/manual/es/book.session.php y es importante que cada programador que desea hacer uso de ésta herramienta consulte este magnifico documento.

Para esta entrada voy a crear un formulario para solicitar al usuario que proporcione su correo electrónico (que en este caso será su ID) y un password ambos datos estarán guardados en una tabla de la base de datos llamada usuarios.  Bien como siempre ire explicando paso a paso las partes que componen el código.

Primera parte:  se evalua si el formulario esta vacio, si es así se muestra el formulario.

<?
if(!$_POST) {
?>

Segunda parte: se configura el formulario y como notamos en el parámetro action se establece el uso de la variable $_POST (Un array asociativo de variables pasadas al script actual a través del método HTTP POST.), el método a usar es POST y en Target usamos _parent para que el resultado del proceso del formulario quede en la misma pestaña o ventana del navegador.

<form action="<? $_POST ?>" method="post" target="_parent">
Tercera parte: se crea el formulario en una tabla con un ancho de 500px, un borde 0 y centrada, notemos que en color anaranjado he puesto el código correspondiente a CSS que da estilo y color al formulario, de color verde estan los campos del formulario y de color azúl esta el código HTML.
<table width="500" border="0" align="center">
  <tr>
    <td colspan="2" style="font-family:Arial; font-size:18px; color:#333333; text-align:center;">Por favor identificate</td>
  </tr>
  <tr>
    <td width="40%" style="font-family:Arial; font-size:18px; color:#333333; text-align:right;">Correo electronico:</td>
    <td width="60%"><input name="email" type="text" size="50" maxlength="100"></td>
  </tr>
  <tr>
    <td style="font-family:Arial; font-size:18px; color:#333333; text-align:right;">Password:</td>
    <td><input name="password" type="password" size="50" maxlength="15"></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><input name="" type="submit" value="Entrar"></td>
  </tr>
</table>
</form>
Cuarta parte: al accionar el botón Entrar del formulario se hará uso de la siguiente parte del código, en esta sección veremos el paso de los datos de la variable $_POST a variales PHP definidas por el programador.
<?
} else {
    $email = $_POST['email'];
    $password = $_POST['password'];
Quinta parte: esta sección como vimos en una lección anterior validamos el formulario.  Lo que pretendemos es evaluar que el usuario escriba su correo y su password, en caso contrario se mostrará el mensaje "Debe llenar los campos Correo Electrónico y Password" y el comando exit terminará el script en este punto.
   
    if(!$email || !$password) {
        echo "Debe llenar los campos Correo Electronico y Password";
        exit;
    }
Sexta parte: conectamos con el servidor y seleccionamos la base de datos.
   
    $db = mysql_connect("localhost","root","123456");
    mysql_select_db("esfuerzo");

Septima parte: Consultamos la tabla usuarios buscando en la en la misma que el usuario y el password coincidan con alguno de los registros, esto a través de WHERE.

    $buscar = "SELECT * FROM usuarios WHERE usuario='$email' and password='$password'"; 
    $resultado = mysql_query($buscar, $db);
   
Octava parte: Evaluamos con el condicional IF que los resultados sean positivos, es decir que el numero de registros encontrados sea diferente de 0.

    if (mysql_num_rows($resultado)!= 0){

Novena parte: Si el usuario y la contraseña son validos se define el inicio de la sesión y guardo los datos que posteriormente usaré para validar al usuario al accesar al resto de las páginas de mi sitio.

        session_start();
        session_register("registrado");
        $registrado = "SI";

Decima parte: Redirecciono el acceso a la página principal de mi sitio web en mi caso es esfuerzo.php.

        header ("Location: esfuerzo.php");

Onceava parte: En caso de que el usuario o la contraseña sean erroneos se mostrará nuevamente el formulario

    }else {
        header("Location: index.php?errorusuario=si target: _self");
    }

Doceava parte: libero toda la memoria asociada con el identificador del resultado, termino la conexión con el servidor y cierro PHP.

    mysql_free_result($resultado);
    mysql_close($db);
}
?>

A continuación les dejo el código completo del script para que lo puedan usar y seguido tambien un ejemplo de como validar la sesión en una de las páginas del sitio.

<?
if(!$_POST) {
?>

<form action="<? $_POST ?>" method="post" target="_parent">
<table width="500" border="0" align="center">
  <tr>
    <td colspan="2" style="font-family:Arial; font-size:18px; color:#333333; text-align:center;">Por favor identificate</td>
  </tr>
  <tr>
    <td width="40%" style="font-family:Arial; font-size:18px; color:#333333; text-align:right;">Correo electronico:</td>
    <td width="60%"><input name="email" type="text" size="50" maxlength="100"></td>
  </tr>
  <tr>
    <td style="font-family:Arial; font-size:18px; color:#333333; text-align:right;">Password:</td>
    <td><input name="password" type="password" size="50" maxlength="15"></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><input name="" type="submit" value="Entrar"></td>
  </tr>
</table>
</form>
<?
} else {
    $email = $_POST['email'];
    $password = $_POST['password'];
   
    if(!$email || !$password) {
        echo "Debe llenar los campos Correo Electronico y Password";
        exit;
    }
   
    $db = mysql_connect("localhost","root","123456");
    mysql_select_db("esfuerzo");
   
    $buscar = "SELECT * FROM usuarios WHERE usuario='$email' and password='$password'"; 
    $resultado = mysql_query($buscar, $db);
   
    if (mysql_num_rows($resultado)!= 0){
        session_start();
        session_register("registrado");
        $registrado = "SI";
        header ("Location: esfuerzo.php");
    }else {
        header("Location: index.php?errorusuario=si target: _self");
    }
    mysql_free_result($resultado);
    mysql_close($db);
}
?>

Ejemplo de validación de inicio de sesión en paginas del sitio web, en caso de no estar validado correctamente llamará una aplicación con un mensaje de error, en este caso yo la nombre como recuerdo.php.

<?
session_start();
session_register("registrado");
if ($registrado == "SI") {
?>
<html>
<head>
<title>Ferreteria "El Esfuerzo"</title>
<link href="esfuerzo_estilos.css" rel="stylesheet" type="text/css" />
</head>

<body>

<div id="fondo">
    <div id="encabezado">
        Ferreteria "El Esfuerzo"
    </div> <!-- Fin de encabezado -->
    <div id="capamenu">
        <ul id="menu">
            <li><a href="bienvenido.php" target="contenido">Inicio</a></li>
            <li><a>Consulta</a></li>
            <li><a>Proforma</a></li>
            <li><a>Facturar</a></li>
            <li><a href="add-productos.php" target="contenido">Agregar</a></li>
        </ul>
    </div> <!-- Fin de capamenu -->
    <div id="contenido">
        <iframe width="100%" height="580" frameborder="0" name="contenido"
        src="bienvenido.php" scrolling="auto"></iframe>
    </div>
</div> <!-- Fin de la capa de fondo -->

</body>
</html>
<?
} else {
    include('recuerdo.php');
}
?>

Bien hazta aquí con este documento, espero que les sirva y cuaquier duda o sugerencia será bien recibida.