En esta oportunidad les traigo una clase perteneciente al futuro framework PHP CodeFlyer, que nos permitirá autentificar usuarios de manera rápida y segura.
Es una clase que construí hace tiempo y que vengo usando hace varios años, pero la he ajustado para que todo el mundo pueda usarla.
Este artículo se basa en el logueo y autentificación de usuarios y no en la creación o registro de usuarios.
Primeramente debemos crear la tabla en donde se almacenarán todos los usuarios de nuestro sitio. Para esto basta con ejecutar la siguiente consulta en tu base de datos:
CREATE TABLE `login` ( `id` int(11) NOT NULL auto_increment, `username` varchar(50) NOT NULL, `password` varchar(32) NOT NULL, `privilege` int(6) NOT NULL default '0', `cookie` binary(32) NOT NULL, `session` binary(32) NOT NULL, `lastactive` date NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Para usos prácticos podemos crear nuestro usuario desde MySQL:
Usuario: admin
Contraseña: admin
INSERT INTO `login` VALUES (1, 'admin', '21232f297a57a5a743894a0e4a801fc3', 1,'','','');
(El md5 de “admin” es “21232f297a57a5a743894a0e4a801fc3″)
Una vez creada la tabla “login” debes copiar el archivo login.php a tu carpeta de proyectos.
El siguiente paso será crear un archivo llamado “config.php” en donde iniciaremos la clase login, y luego incluiremos este config.php en todos nuestros archivos del proyecto. Completa los campos ‘database’, ‘username’ y ‘password’ con los datos de acceso de tu base de datos MySQL:
config.php:
<?PHP
include('login.php');
$login = new login(array(
'database' => 'dbexample',
'table' => 'login',
'username' => 'root',
'password' => '1234'
));
?>
Para loguear a un usuario usamos la función login:
if($login->login('usuario', 'contraseña'))
{
// Welcome!
}
Entonces de esta manera podemos crear nuestro formulario de inicio de sesión, al que llamaremos index.php
La idea es mostrar el formulario a los usuarios ‘no logueados’, y redirigir hacia “protected.php” a los usuarios correctamente logueados:
index.php:
<?PHP
include('config.php');
if ($_POST['submit'])
{
if($login->login($_POST['usn'], $_POST['pwd']))
{
header('location: protected.php');
}
else
{
echo "<strong>Login error</strong>";
}
}
if (!$login->logged()) : ?>
<form method="post">
<p><label>Username: <input type="text" name="usn" value="" /></label></p>
<p><label>Password: <input type="password" name="pwd" value="" /></label></p>
<p><input type="submit" name="submit" /></p>
</form>
<?PHP
else:
header('location: protected.php');
endif;
?>
Entonces ya tenemos una manera para autentificar usuarios, pero ahora debemos proteger aquellas páginas que sólo deben ser vistas por usuarios registrados. Para ello vamos a crear una página protegida llamada “protected.php”:
protected.php:
<?PHP
include('config.php');
if (!$login->logged())
{
header("location: index.php");
die();
}
?>
<strong>Este contenido es privado</strong> <a href="logout.php">Salir de mi cuenta</a>
La función logged() nos devuelve true si el usuario está autentificado, o false si el usuario intenta ingresar con una sesión inválida.
Tán sólo nos falta un archivo más llamado “logout.php” que usaremos para destruir la sesión:
logout.php:
<?PHP
include('config.php');
$login->logout();
header("location: index.php");
?>
Entonces a modo de resumen podemos usar las siguientes funciones:
// Creamos la clase, enviando los datos de acceso a la base de datos MySQL:
$login = new login(array(
'database' => 'dbexample',
'table' => 'login',
'username' => 'root',
'password' => '1234'
));
// Logueamos al usuario "username" con la contraseña "password"
$login->login("username", "password");
// Opcionalmente se puede utilizar un tercer parámetro bool, para utilizar cookies
// y recordar la visita del usuario, aún después de cerrar el navegador:
$login->login("username", "password", true);
// Preguntar si el usuario está correctamente autentificado. Devuelve false en caso de haber error:
$login->logged();
// Cerrar y destruir la sesión:
$login->logout();
Haremos cosas interesantes con esta clase mas adelante ![]()
Este artículo contiene los siguientes archivos:
Holas, muy bueno tu blog me gusto mucho entre a casi todos tus articulos me gustaron mucho >.< jej
primero empese por utilizar esto en mi proyecto, pero te cuento que estoy usando una capa de abtraccion de datos me PEAR el MDB2 ya la modifique todo lo respectivo a la base de datos.
Pero por algun motivo no me deja mostrar el form de login y me sale este mensaje
y ese error sale porque creo que no es correcta la consulta hise un echo y esta es la consulta que sale despues de las condicionales IF o else
en conclusion sale el query del else.
Espero que me puedas ayudar, mientras estare implementando sexyForms xD
Aparentemente es un error en tus modificaciones, no de la clase. No puedo ayudarte porque yo no soy el que ha metido mano
y no se que cambios podrías (o tendrías que) haber hecho.
Saludos.
Porque el USERNAME=” <—- tiene esa comilla? O.O
Implementado en un sistemita que estoy armando. Anda joya! modifike nomas la parte ke dice:
header("location: index.php");por una en JS para ke no tire el error:
lo cambie por esto:
perdon, ahi salio los tags de JS, lo cambie por esto:
?> <script typte="text/javascript"> window.location.href = 'index.php'; </script> <?Hola me podrias ayudar de favor como puedo hacer o con que librerias o aplicacion js para que me aparesca un cuadro contenedor donde se me presenten los “ultimos comentarios” como el que se encuentra en esta pagina en la parte de abajo…. Muchas gracias de antemano si me puedes ayudar… Y una exelente apgina y proyectos
Interesante el codigo, pero solo funciona con versiones inferiores a PHP 5.0.0, para versiones superiores alguna idea?