• 2009: 01 02 03 04 05 06 07 08 09 10 11 12
  • 2008: 01 02 03 04 05 06 07 08 09 10 11 12
  • 2007: 01 02 03 04 05 06 07 08 09 10 11 12
  • Archivo de Enero del 2007

    12 Ene

    Mostrar resultado de form

    Una de las tareas pendientes que me quedaron después de hacer el sistema de login, fue cómo mostrar de la mejor forma posible el resultado de un form. Supongo que habrá formas muchísimo más elegantes pero esta es la que yo usé y que en estos momentos -sabiendo solo php básico- me parece lo suficientemente adecuada.

    Lo único que hago es incluir el mensaje en una variable de sesión y recargar con un header al archivo donde estaba el form. El código que hay que añadir es bastante sencillo:

    $_SESSION['msg'] = "Login incorrecto";
    header("Location: index.php");

    Y para mostrar esa variable en el archivo donde está el form, en este caso sería index.php, simplemente hay que añadir lo siguiente:

    echo $_SESSION['msg'];
    $_SESSION['msg'] = null;

    Esto es todo, solo queda recordar que en todos los archivos que queramos modificar la variable de sesión debemos asegurarnos que hemos añadido session_start(); sino no se podrá hacer de forma correcta.

    kesar apunta otra manera de mostrar estos mensajes de error, según mi opinión algo más elegante en cuanto a código pero la url a la que envía me parece menos elegante y a su vez el mensaje es fácilmente manipulable.

    En el archivo donde manda el form:

    
    header("Location: index.php?error=Login incorrecto");
    

    Y en el index.php:

    
    if(isset($_GET['error'])) echo $_GET['error'];
    

    Para gustos los colores, mil gracias por la sugerencia he aprendido mínimo dos cosas con esto.

    10 Ene

    Presentación Webdev

    Escribo este post con el único propósito de presentarme ante los seguidores de Planet Webdev al que fui añadido hace poco. El blog fue creado hace ahora exactamente 10 días con el fin de aprender cada día algo nuevo sobre programación, sobretodo orientada al desarrollo web.

    Como es lógico cometeré muchos errores, tanto de seguridad como de sintaxis, incluso -espero que no- código que no funcione. Por eso mismo me decidí de hacerle en un blog, para poder ir presentando mis avances y que los lectores corrijan, critiquen, expresen su punto de vista… Por esa parte de momento estoy bastante contento, ya que en apenas una semana de vida ya me han corregido una vez y espero que lo hagáis en muchas más ocasiones -tampoco os paséis.

    Como podréis ver el contenido es bastante escaso pero 10 días con exámenes de por medio no dan para más, aquí os dejo los posts que de momento os podrían interesar.

    Sistema de registro y login de usuarios.

    Registro y login de usuarios ( i )
    Registro y login de usuarios ( ii )
    Registro y login de usuarios ( iii )
    Registro y login de usuarios ( iv )

    10 Ene

    Macintosh Apples

    Un día como hoy es pecado no hablar de Apple, ha revolucionado el mercado de móviles y mp3, puede suponer un gran cambio, así que yo no voy a ser menos.

    Ayer haciendo los últimos exámenes de años anteriores para acabar de prepararme el examen que he hecho esta mañana -Circuitos Digitales. Me encuentro esta perla en un ejercicio en el examen de 1999.

    Cise 2

    La compañía frutera MACINTOSH APPLES®

    Nunca está de más un toque de humor en una de esas cribas que llaman exámenes.

    08 Ene

    Registro y login de usuarios ( iv )

    Ya tenemos el sistema de login montado de forma bastante segura pero todo se puede mejorar. En este último post de la serie explicaré como hacer que el usuario se quede logueado mediante sesiones del navegador y cookies que creamos en el post anterior.

    Para ello creamos una función que detecte si el usuario tiene alguna sesión activada o alguna cookie correcta que le permita estar logueado sin necesidad de volver a rellenar el form. En mi caso la funció la he creado en un archivo llamado function.php

    <?php
    function is_login() {
       // Comprobamos si existe sesión
       if(isset($_SESSION['user'])) return true;
       //Comprobamos si hay cookie, si está bien y le asignamos una sesión
       if(isset($_COOKIE['nonce'])) {
          $cookie = mysql_real_escape_string($_COOKIE['nonce']);
          $query = mysql_query("SELECT * FROM users WHERE nonce='$cookie'") or die(mysql_error());
          $data = mysql_fetch_array($query);
          if(isset($data['username'])) {
             $_SESSION['user'] = $data['username'];
             return true;
          }
       }
       return false;
    }
    ?>

    Como vemos en los comentarios de la función primero se comprueba si hay sesión de navegador, si la hay devuelve true y no ejecuta nada más. En caso de no encontrarla pasa a comprobar si hay cookie, en caso afirmativo comprueba que el nonce que contiene coincida con alguno de la BD y si es así inicia la sesión de navegador y devuelve true. En el caso que no existan ninguno de los dos devuelve false.

    Esta función la usamos para saber si el usuario ya está dentro y por lo tanto no deberemos mostrarle el form o si por lo contrario no lo está y debemos exigir que se loguee. Para ello modificaremos el index.php que creamos anteriormente sustituyendo por el siguiente código:

    <?
    include_once("connect.php");
    include("functions.php");
    if(is_login()) {
       // Aquí añadimos cualquier contenido que queramos que vean los usuarios registrados
       echo "Hola <strong>".$_SESSION['user']."</strong>, ya estás dentro";
       echo "<a href='logout.php'>Desconectar »</a>";
    }else{
       echo "<form action='login.php' class='clientform' method='post'>";
       echo "<p><label for='username'>Nombre</label> <input type='text' name='username' id='username' tabindex='1' /></p>";
       echo "<p><label for='password'>Clave</label> <input type='password' name='password' id='password' tabindex='2' /></p>";
       echo "<p><input type='submit' value='Entrar' tabindex='3' /></p>";
       echo "</form>";
    }
    ?>

    Este mismo if podemos adaptarlo a cualquier página que queramos mostrar únicamente a los usuarios registrados, simplemente añadiendo el include("functions.php"); y a continuación el if..else.

    Por último, podemos observar que hay un enlace a logout.php:

    <?
    include('connect.php');
    // Borramos cookie
    $_COOKIE['nonce'] = '';
    setcookie('nonce','',time()-3600,'/');
    // Borramos sesión
    $_SESSION['user'] = null;
    unset($_SESSION);
    session_destroy();
    header("Location: /");
    ?>

    Con este php conseguimos eliminar todos los elementos que mantienen logueado al usuario y redireccionamos a la portada de nuestra web, con el siguiente código header("Location: /");.

    Para ser mi primera serie de posts sobre programación me ha ido bastante bien, espero haber sido lo suficientemente claro y que os haya sido de ayuda.

    Gracias a Alex por el apunte sobre seguridad en los comentarios.

    Posts relacionados:

    Registro y login de usuarios ( i )
    Registro y login de usuarios ( ii )
    Registro y login de usuarios ( iii )

    06 Ene

    Registro y login de usuarios ( iii )

    Ahora que ya tenemos superado como crear la base de datos, conectarse a ella y registrar los usuarios. Ahora explicaré como permitir a los usuarios conectarse a nuestro sistema.

    Para empezar creamos el form de acceso en index.php:

    <?
    include("connect.php");
       echo "<form action='login.php' method='post'>";
       echo "<p><label for='username'>Nombre</label> <input type='text' name='username' id='username' tabindex='1' /></p>";
       echo "<p><label for='password'>Clave</label> <input type='password' name='password' id='password' tabindex='2' /></p>";
       echo "<p><input type='submit' value='Entrar' tabindex='3' /></p>";
       echo "</form>";
    ?>

    No tiene ningún misterio, únicamente envía con el método post los datos a login.php.

    <?
    include('connect.php');
    $user=stripslashes($_POST['username']);
    $pass=stripslashes($_POST['password']);
    // Comprobamos los datos
    $query = mysql_query("SELECT password FROM users WHERE username = '$user' limit 1") or die(mysql_error());
    $data = mysql_fetch_array($query);
       if($data['password'] == md5($pass)) {
          $_SESSION['user'] = $user;
          // Crea la cookie y actualiza le nonce (md5 aleatorio para hacerlo más seguro.)
          $nonce = md5(uniqid(rand(), true));
          setcookie('nonce', $nonce, time() + 7776000,'/');
          $query = mysql_query("UPDATE users SET nonce = '$nonce' WHERE username = '$user'");
          echo "login ok";
       } else echo 'fail';
    ?>

    Una vez recogidos datos del form de manera similar a como hacemos el registro de usuarios, comprobamos que el usuario esté en la base de datos y una vez hecho esto que las contraseñas coincidan. Si es así creamos la sesión de navegador, creamos la cookie que contendrá el nonce, md5 aleatorio, que ya comentamos en el registro de usuarios y actualizamos el de la base de datos.

    Estos tres últimos pasos nos permetir más adelante hacer login automático preservando toda la seguridad posible.

    Posts relacionados:

    Registro y login de usuarios ( i )
    Registro y login de usuarios ( ii )
    Registro y login de usuarios ( iv )