Más de una vez nos encontramos con la necesidad de crear paneles de administración u otros sectores para nuestros sitios web que no deberían ser accesibles para cualquier usuario. La forma más cómoda de hacer esto es mediante sesiones que “rastreen” a un usuario que previamente haya introducido un usuario y una clave.
La razón por la que escribo esto, es que la primera vez que me enfrente a un problema similar a este, los howto’s que encontré sobre esto estaban bastante des actualizados o con algunas cositas que no me gustaron, pero bueno, de todo hice un rejunte y arme esto… si quieren aportar algo, sera muy bienvenido
Comenzaremos este mini HOWTO creando una base de datos en MYSQL que contendrá algunos datos de los usuarios, en nuestro caso únicamente su nombre y password, pero tranquilamente se pueden agregar otros datos como e-mail, fecha de nacimiento, etc.
-
mysql> USE nombredb;
-
DATABASE changed
-
mysql> CREATE TABLE usuarios(
-
-> id int(6) NOT NULL AUTO_INCREMENT,
-
-> nombre varchar(20) NOT NULL,
-
-> pass varchar(20) NOT NULL,
-
-> PRIMARY KEY(id)
-
-> );
-
Query OK, 0 rows affected (0.10 sec)
Creo que no hay mucho que explicar de esta tabla, los campos son bastante explícitos, tenemos un campo “id” el cual sera usado para indexar a los usuarios, luego “nombre” donde ira, valga la redundancia, el nombre del usuario y “pass” donde guardaremos la clave del mismo.
Ahora comenzamos con los scripts en PHP.
Lo primero que necesitamos es algún modo de agregar usuarios a esa tabla que creamos. Pero antes que nada, como necesitaremos conectarnos varias veces a nuestra base de datos para recuperar sus valores, lo primero que haremos sera un script para conectarnos a la misma y así no tener que repetirlo.
-
-
/*conexion.php, script usado para conectarnos a la base de datos
-
que creamos anteriormente*/
-
-
//Definimos las variables que contendrán los datos de la conexión
-
$hostdb = "hostdeladb";
-
$userdb = "usuariodelabd";
-
$passbd = "passworddelabd";
-
$bd = "nombredb";
-
-
-
-
?>
De ahora en más, cuando necesitemos conectarnos a la bd, simplemente haremos “include(‘conexion.php’);”
Ahora crearemos el formulario de registro, para esto utilizaremos un form en html cuya acción estará en otro script al cual llamaremos agregar.php. Cabe aclarar que podemos meter el form y el control en un mismo archivo, yo los separo simplemente para que quede más claro que hace cada parte.
<form action="registro.php">
<fieldset>
<label for="user">Usuario:</label>
<input type="text" id="user" name="user"/>
<label for="pass">Clave:</label>
<input type="password" id="pass" name="pass" />
<input type="submit" name="button" id="button" value="Enviar" />
</fieldset>
</form>
Y ahora el script que agregará al nuevo usuario en nuestra base de datos. Para esto usaremos la función “mysql_query()” de PHP usando como parámetro la directiva “INSERT” de mySQL para insertar dentro de la tabla que creamos al principio el usuario y clave que acabamos de elegir controlando que no exista un usuario con el mismo nombre y controlando también que los campos no estén vacíos. El método que usare acá es fácilmente “violable”, dejo la seguridad a su cargo ya que no es el objetivo de esta guía.
-
// agregar.php
-
/*Controlamos que se haya elegido un valor para el usuario y la
-
clave. Sabiendo que los mismos fueron completados, los
-
procesaremos. Si no, redirijimos la página hacia el form de
-
registro*/
-
if(isset($_POST['user']) && ($_POST['user']
-
!= " " || $_POST['pass'] != " ") ) {
-
//Nos conectamos a la base de datos
-
include(conexion.php);
-
//Declaro variables locales con el valor de las globales
-
//obtenidas por el form
-
$user = $_POST['user'];
-
$pass = $_POST['pass'];
-
//Haremos una consulta a la base de datos para saber si ya
-
//existe un usuario con ese nombre
-
$qry = mysql_query("select * from usuarios where nombre='$user'");
-
if(mysql_num_rows($qry) != 0) /*Si el valor de mysql_num_rows
-
no es 0, quiere decir que el usuario ya
-
existe y por tanto no haremos nada*/
-
echo "El usuario ya existe";
-
else { //Si el usuario no existe lo incorporamos a nuestra base de
-
//datos
-
mysql_query("insert into usuarios(nombre,pass) values('$user',
-
'$pass'));
-
echo "Usuario agregado";
-
}
-
-
} else
-
header("location: registro.html
Ahora que tenemos usuarios en la base de datos, necesitamos un form que nos permita
autentificarlos.
Para esto usaremos un form html exactamente igual al anterior aunque, si en el
anterior pediste otros datos ademas del usuario y el password, acá simplemente
pediremos estos dos ultimos.
<form action="login.php">
<fieldset>
<label for="user">Usuario:</label>
<input type="text" id="user" name="user"/>
<label for="pass">Clave:</label>
<input type="password" id="pass" name="pass" />
<input type="submit" name="button" id="button" value="Enviar" />
</fieldset>
</form>
El siguiente paso sera entonces, buscar al usuario en la base de datos y comprobar
que coincida con la clave que proporciono. Esto lo hacemos de forma similar al
control para registrarlo, efectuamos una consulta buscando el usuario y la clave y
vemos cuantas entradas nos devuelve mediante “mysql_num_row()” si nos devuelve 0,
quiere decir que el usuario y/o la clave proporcionadas no fueron correctos, caso
contrario, guardaremos el nombre del usuario en una variable de sesión, la cual
usaremos para control más adelante.
-
//login.php
-
//Nos conectamos a la base de datos
-
include("conexion.php");
-
-
//Iniciamos la sesión donde guardaremos las variables
-
-
-
//Creamos variables locales con el contenido de las devueltas por el form
-
$user = $_POST['user'];
-
$pass = $_POST['pass'];
-
//Realizamos la consulta a la base de datos y controlamos que nos devuelva
-
//algun resultado
-
$qry =
mysql_query("select * from usuarios where nombre='$user' and
-
pass='$pass'");
-
-
$_SESSION['user'] = $user; /*Declaramos una variable de sesión donde
-
guardaremos el nombre del usuario
-
para control*/
-
header("location: private.php");
/* Nos vamos a la sección "privada"
-
de nuestra página*/
-
} else
-
echo "El usuario y/o clave no son correctas";
-
?>
Por ultimo, crearemos la sección de nuestra página a la que queremos que
solo ingresen nuestros usuarios registrados.
Dentro de la misma, controlaremos que el usuario se haya logeado mediante la
variable de sesión $_SESSION['user'].
-
//private.php
-
-
if(isset($_SESSION['user'])) { //controlamos que la variable este declarada
-
echo “Bienvenido $_SESSION['user']!”;
//Si el usuario esta logeado,
-
//vera un mensaje de bienvenida
-
else
-
header(“location: ingresar.html”);
//Si el usuario no esta logeado, regresara al
-
//formulario de login
-
?>
Y con esto terminamos esta mini guía.
Si necesitamos otras páginas “privadas”, simplemente controlamos la misma variable.
Para deslogearnos, todo lo que tendremos que hacer es llamar en alguna página a la
función “session_destroy()”.
Hay que recordar también, que si nuestros usuarios cierran el navegador, la sesión
también se cerraran. Para resguardar las variables entonces, debemos hacer uso de
cookies, pero eso lo dejaremos para otra ocasión.
Por ultimo, hay que destacar que nuestro “sistema de registro y login” no tiene
ningún tipo de seguridad, las claves se almacenan y viajan libremente sin ningún
tipo de encriptación, así que es otro asunto pendiente