Ahora viene la parte más interesante. Iniciar sesión y proteger páginas. Let's see...
Inicio de sesión
Comenzaremos creando un formulario más simple que el de registro, usuario y contrasela. Que envíe los datos a login.php.
HTML Code:
<form method="post" action="login.php">
Usuario:<br />
<input type="text" name="l_user" /><br />
Contraseña:<br />
<input type="password" name="l_pass" /><br />
<br />
<input type="submit" value="Iniciar sesión" />
</form>
Fácil, ¿no? Bien, ahora el archivo login.php:
PHP Code:
<?php
// Primero, transformamos los datos recibidos en entidades html para evitar inyecciones sql
$l_user = htmlentities($_POST['l_user'], ENT_QUOTES);
$l_pass = htmlentities($_POST['l_pass'], ENT_QUOTES);
// Ahora creamos una sentencia sql en busca del usuario ingresado:
$select = mysql_query("SELECT * FROM sys_users WHERE user='{$l_user}'");
// Ahora comprobamos que el usuario exista.
if(mysql_num_rows($select) != 0) {
// Bien, ahora que sabemos que existe, creamos un bucle para obtener los datos...
while($row = mysql_fetch_array($select)) {
/* Ahora con los datos obtenidos, comprobamos que la contraseña sea correcta.
Hay que recordar que la contraseña guardada está encriptada y no se puede desencriptar.
Para hacer la comprobación, encriptamos la nueva contraseña y la comparamos con la guardada */
if(md5($l_pass) == $row['pass']) {
// En caso de que esté correcto, establecemos la sesión como iniciada. Para ello, usamos cookies.
setcookie('session', md5($row['user'] . $row['pass']), time()+3600);
// También creamos una cookie con la id del usuario...
setcookie('session_id', $row['id'], time()+3600);
// El contenido de la cookie es usuario+contraseña encriptados, y durará una hora.
// Ahora cerramos los ifs, con sus respectivos mensajes opuestos.
} else {
echo 'Usuario encontrado, pero la contraseña es incorrecta.<br /><a href="history.back();return false;"<< Atrás</a>';
}
// La siguiente llave cierra el bucle while, no necesita else.
}
} else {
echo 'El usuario no existe.<br /><a href="history.back();return false;"<< Atrás</a>';
}
?>
Ya tenemos nuestro login. ¿Qué más? Listo, esto está terminado...
No molesten...
Dije que no...
Ok, hagamos el logout para completar esto.
Cerrar sesión
Para cerrar la sesión, simplemente nos aseguramos de que las cookies que hemos insertado hayan caducado. Para esto, las "sobreescribimos" y modificamos su fecha límite a una fecha pasada. Bastará con un enlace al archivo logout.php para esto.
logout.php:
PHP Code:
<?php
// Comprobamos que haya alguna sesión iniciada.
if($_COOKIE['session']) {
// Ahora sobreescribimos las cookies.
setcookie('session', 'dada', time()-3600);
setcookie('session_id', 'dada', time()-3600);
// Mensaje de confirmación.
echo 'Sesión cerrada exitosamente.';
}?>
El contenido de las cookies modificada no importa, pues se eliminarán instantáneamente.
Bien... Ahora terminamos esto al fin con la función para proteger páginas. La siguiente función php debe ser incluida por las páginas protegidas.
PHP Code:
<?php
function isonline() {
// Comprobamos que existan las cookies..
if($_COOKIE['session'] && $_COOKIE['session_id']) {
// Transformamos las cookies en entidades html para evitar inyecciones sql
$session = htmlentities($_COOKIE['session'], ENT_QUOTES);
$session_id = htmlentities($_COOKIE['session_id'], ENT_QUOTES);
// Armamos con la id guardada la sentencia sql para buscar el usuario.
$find = mysql_query("SELECT * FROM sys_users WHERE id='{$session_id}'");
// Comprobamos que el usuario exista.
if($mysql_num_rows($find) != 0) {
// Armamos el bucle para obtener la información del usuario..
while($row = mysql_fetch_array($find)) {
// Comprobamos que la cookie 'session' coincida con los datos guardados..
if(md5($row['user'] . $row['pass']) == $_COOKIE['session']) {
// Devolvemos true.
return 1;
}
}
}
}
}
?>
Ok. Ahora, para proteger una página, debemos llamar la función dentro de una comprobación. Antes de mostrar el contenido oculto, escribimos esto:
PHP Code:
<?php
if(isonline()) {
?>
Escribimos todo el contenido privado, y finalmente cerramos el if:
También podemos agregar un else con un cartel que diga que es necesario iniciar sesión.
Eso es todo, amigos. No he probado nada del tutorial, lo he escrito así simplemente. Si encuentran algún error, agradecería que me lo dijeran ;)
Que quede claro que esto es algo básico y quizá algo inseguro, pero es solamente para que se den una idea, mejorarlo queda en ustedes :P
Saludos.