PHP Validando usuarios

De MediaWiki
Ir a la navegación Ir a la búsqueda

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:

Php validacion 1.jpg



  • 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']!=1) {  // Mellor preguntar polo valor que permito o acceso.
 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).