PHP Validando usuarios
Introdución
- Un aspecto ao que case sempre imos enfrontarnos é ao de permitir o acceso a certas páxinas en función dos permisos que teña un determinado cliente.
- Para obter ditos permisos teremos que validar ao usuario e identificalo.
- A identificación case sempre vai vir dun formulario no que o usuario introduce o seu login-password.
- Nos recollemos ditos datos e normalmente faremos unha consulta a unha base de datos para comprobar que o usuario existe.
- Neste punto imos ver como podemos facer para que o usuario non poida entrar nas páxinas se non está validado.
- Como aínda non sabemos 'conectar' con bases de datos imos supoñer que o usuario ten que ter de nome 'pepe' e de password '12345'. En caso doutra combinación supoñemos que o usuario non está autorizado para acceder ao sitio web.
- Fixarse que estamos implementando un mecanismo de autenticación de usuarios.
- Non indicamos nada acerca dos permisos que ten dito usuario. Por exemplo, un administrador e un usuario son usuarios que teñen dereito de conexión ao sitio web, pero cada un deles terá permisos diferentes para poder realizar accións distintas...
Exemplo práctico
- Partimos por tanto dunha páxina de validación cun formulario.
- Nome da páxina: UD4_Exemplo1_Validacion_Formulario.php
1 <?php 2 session_start(); 3 unset($_SESSION['autenticado']); 4 5 ?> 6 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 7 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 8 <html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"> 9 <head> 10 <meta charset="utf-8" /> 11 <title>Formulario</title> 12 <style> 13 .formularios{ 14 width: 30%; 15 margin: 0px auto; 16 } 17 .etiqueta{ 18 float: left; 19 width: 190px; 20 } 21 .botonesformularios{ 22 width: 50%; 23 margin: 30px auto; 24 text-align: center; 25 } 26 </style> 27 </head> 28 <body> 29 <form id="frmValidacion" class="formularios" method="post" action="UD4_Exemplo1_Validacion_Usuarios.php"> 30 <div> 31 <div class='etiqueta'>Login:</div> 32 <input type="text" size="15" maxlength="15" name="txtLogin" /> 33 </div> 34 <div> 35 <div class='etiqueta'>Password:</div> 36 <input type="password" size="15" maxlength="15" name="txtPassword" /> 37 </div> 38 <div class="botonesformularios"> 39 <input type='submit' value="ENVIAR" /> 40 </div> 41 </form> 42 43 </body> 44 </html>
- Liña 2: Sempre debemos ter o session_start() ao comezo da páxina se imos traballar con variables de sesión.
- Liña 3: Dita variable de sesión estará explicada posteriormente. Adiantar que é a variable que imos utilizar para deixar visualizar ao usuario as páxinas protexidas (que requiran unha autenticación previa).
- Visualizamos isto:
- O seguinte será validar o usuario e comprobar que coincide có usuario/password indicado.
- Nome da páxina: UD4_Exemplo1_Validacion_Usuarios.php
1 <?php 2 session_start(); 3 4 // Con isto impedimos que poidan cargar directamente a páxina ou 5 // que non se envíen datos 6 if (!isset($_POST['txtLogin']) || !isset($_POST['txtPassword']) || 7 empty($_POST['txtLogin']) || empty($_POST['txtPassword'])){ 8 header("location:UD4_Exemplo1_Validacion_Formulario.php"); 9 exit(); 10 } 11 // Eliminamos caracteres 12 $usuario = filter_var($_POST['txtLogin'],FILTER_SANITIZE_STRING); 13 $password = filter_var($_POST['txtPassword'],FILTER_SANITIZE_STRING); 14 15 if (($usuario=='pepe') && ($password=='12345')){ 16 $_SESSION['autenticado']=1; 17 header('location:UD4_Exemplo1_Validado.php'); 18 exit(); 19 } 20 else { 21 $_SESSION['autenticado']=0; 22 header('location:UD4_Exemplo1_Validacion_Formulario.php'); 23 exit(); 24 } 25 ?>
- Liña 2: Sempre debemos ter o session_start() ao comezo da páxina se imos traballar con variables de sesión.
- Liñas 15-18: En caso de coincidir o login/password (nunha situación real teríamos que facer unha consulta a unha base de datos) utilizamos unha variable de sesión de nome autenticado e damos un valor de 1. En caso contrario terá un valor de 0.
- Dita variable debemos usala en todas as páxinas onde sexa necesario que o usuario estea autenticado. Vexamos un exemplo na seguinte páxina.
Nota: Fixarse que despois da orde 'header' hai un exit para que o script non continúe executándose. Isto é así xa que o header non se enviará ao cliente ata que non remate o script. Dependerá de nos como programadores se queremos 'facer' algo máis antes de redirixir a páxina do navegador do cliente.
- Nome da páxina: UD4_Exemplo1_Validado.php
1 <?php 2 session_start(); 3 4 if ($_SESSION['autenticado']==0) { 5 header('location:UD4_Exemplo1_Validacion_Formulario.php'); 6 exit(); 7 } 8 9 ?> 10 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 11 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 12 <html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"> 13 <head> 14 <title>Usuario autenticado</title> 15 </head> 16 <body> 17 <h1>Se podes ver isto es un usario autenticado...</h1> 18 19 <a href="UD4_Exemplo1_Validacion_Formulario.php">Pulsa para volver a validarte...</a> 20 </body> 21 </html>
- Liña 2: Sempre debemos ter o session_start() ao comezo da páxina se imos traballar con variables de sesión.
- Liñas 4-7: É onde facemos a validación do usuario. Se dito usuario non foi autenticado, entón irá a páxina inicial.
-- Ángel D. Fernández González -- (2016).