En un proyecto personal,estoy implementando un panel de control, con el acceso restringido mediante un login. Para que no sea necesario introducir cada vez que entremos a la página nuestros datos otra vez, he añadido un sistema de cookies, que se encargarán de validar directamente al usuario durante una hora.

El sistema es realmente sencillo. Necesitamos, para empezar, una base de datos donde almacenemos los usuarios y contraseñas. Podría ser algo así:

  1. CREATE TABLE usuarios (
  2. id tinyint(3) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. nombre varchar(64) collate utf8_spanish2_ci NOT NULL,
  4. mail varchar(128) collate utf8_spanish2_ci NOT NULL,
  5. pass varchar(40) collate utf8_spanish2_ci NOT NULL COMMENT ‘en sha1′,
  6. grupo enum(‘editor’,‘admin’,‘god’) collate utf8_spanish2_ci NOT NULL,
  7. PRIMARY KEY  (id)
  8. )

Lo único destacable es el sql, es que la contraseña la almacenaremos codificada mediante la función SHA1, que crea una cadena de 40 caracteres.

Lo más lógico en estos casos es tener el directorio donde queremos restringir el acceso (en nuestro caso cpanel)  y dentro de él, un archivo index.php que mostrará la información que deseamos, y un login.php que servirá para que los usuarios puedan hacer login y tener acceso (lógico, ¿no?).

El usuario, cuando quiera entrar al área privada, entrará por la ruta www.midominio.com/cpanel/

El navegador, directamente, lo redirige al archivo index.php (o index.html, depende de como tengamos configurado el servidor, y si existe o no el archivo).

Veamos que código necesitamos en este index.php:

  1. include_once(‘conexion.php’);
  2.  
  3. $user = (isset($_COOKIE[‘usuario’])) ? $_COOKIE[‘usuario’] : ;
  4. $pass = (isset($_COOKIE[‘ccontrol’])) ? $_COOKIE[‘ccontrol’] : ;
  5.  
  6. if ($user != && $pass != ){
  7.         $sql = ‘SELECT pass FROM usuarios WHERE mail = "’ . $user . ‘"’;
  8.         $qr_res = mysql_query($sql);
  9.  
  10.         $password = mysql_result($qr_res, 0, ‘pass’);
  11.         if ($password != $pass) {
  12.                 header(‘location: login.php’);
  13.         } else {
  14.                 echo ‘Acceso Permitido’;
  15.         }
  16. } else {
  17.         header(‘location: login.php’);
  18. }

Hasta ahora, ningún problema.

- Obtenemos los datos de conexión a la BD mediante el archivo conexion.php, recogemos los datos de la cookie (en nuestro caso llamamos usuario al email del usuario, y ccontrol a la contraseña)

- Comprobamos que los datos de la cookie no están vacios.

- Realizamos la consulta para extraer la contraseña de ese usuario.

- Si las contraseñas coinciden se permite el acceso, si no, se remite al usuario a la página de login.

Un pequeño inciso para comentaros que la contraseña se almacena en la cookie codificada ya mediante SHA1, para no tener problemas de seguridad.

Bien, en un primer momento el usuario ha intentado acceder a el contenido. Si ya estubiera logueado, se le permite el acceso sin ningún problema. Sino, lo mandamos al login. Veamos el código de login.php:

  1. include_once(‘conexion.php’);
  2.  
  3.         $user = (isset($_POST[‘user’])) ? $_POST[‘user’] : ;
  4.         $ccontrol = (isset($_POST[‘ccontrol’])) ? $_POST[‘ccontrol’] : ;
  5.         $login = (isset($_POST[‘login’])) ? $_POST[‘login’] : ;
  6.         $action = (isset($_REQUEST[‘action’])) ? $_REQUEST[‘action’] : ;
  7.  
  8. if ($action == ‘login’ || $login == ‘Entrar’){
  9.  
  10.         $sql = ‘SELECT pass FROM usuarios WHERE mail = "’ . $user . ‘"’;
  11.         $qr_res = mysql_query($sql);
  12.  
  13.         $password = mysql_result($qr_res, 0, ‘pass’);
  14.         if ($password == sha1($ccontrol)) {
  15.                 setcookie(‘usuario’, $user, time()+3600); //cookies a 1 hora
  16.                 setcookie(‘ccontrol’, sha1($ccontrol), time()+3600);
  17.                 header(‘location: index.php’);
  18.         }
  19. } else {
  20.         //echo ‘no hay datos’;
  21. }

Y el html del archivo login.php seria el siguiente, justo debajo del PHP

  1. <form action="login.php" method="post">
  2. <input id="user" name="user" type="text" />
  3. <input id="ccontrol" name="ccontrol" type="password" />
  4. <input id="login" name="login" type="submit" value="Entrar" />
  5.         </form>

Y poco más queda por explicar… El archivo login.php comprueba los parametros del formulario, y si todo coincide, guarda las cookies con el correo del usuario y su contraseña en formato SHA1. La validez de la cookie será de 1 hora. Tras grabar la cookie en el navegador, redirigimos al usuario al index.php, el cual le permitirá acceder a los contenidos sin ningún problema.

Para una mayor seguridad, el email del usuario deberiamos guardarlo en la cookie también codificado con SHA1, para así evitar problemas con robos de información, etc…
Por último, como buenos programadores, crearemos una función llamada permitirAcceso, a la cual llamaremos en cada página de nuestro panel de control. Su función será comprobar las cookies y si no coinciden, mandar al usuario directamente a login.

Si eres nuevo, puedes subscribirte a nuestras noticias por RSS feed. Gracias por tu visita!