Loguear varios usuarios sin BD.

Resumen.

En el artículo anterior vimos como loguear un usuario sin recurrir al uso de una base de datos, en este artículo vamos a hacer lo mismo pero para varios usuarios. ¿Cuantos? Pues el cuanto tal, no existe un número máximo, el problema radicaría en como gestionar esos usuarios sin cometer errores, por lo que este método se puede decir que va bien mientras no tengamos mas de 15, 20, o 25 usuarios, el limite queda en manos del interesado. Veamos como lo hacemos.

Artículo.

Tomando como referencia este artículo, vamos a ver ahora como podemos autorizar un acceso a varios usuarios sin recurrir a una base de datos como seria lo mas lógico y fácil de administrar. Pero si el número de usuarios va a ser bajo, digamos menos de 25, si es factible, aunque este límite dependerá no tanto de número, sino más bien de la frecuencia de posibles incorporaciones de nuevos usuarios o desautorización de usuarios ya existentes.

Sin mas preámbulo vamos a ello, y tomando como referencia el mencionado artículo, vamos a implementar una medida de seguridad, que puede parecer muy simple, pero al mismo tiempo muy eficaz. Vamos a crear una variable de sesión en el formulario de identificación, para que, si esta no existe, no se realice el proceso de identificación. El motivo de esto, es sencillo, un atacante podría crear su propio formulario y desde el, tratar de ejecutar intentos de acceso. Esto lo haremos de la siguiente forma:
<?php session_start(); $form_ok mt_rand(1000,9999); $_SESSION['form_ok'] = $form_ok;    // Creamos una sesion ?>
En la primera línea de nuestro formulario, es decir, antes de comenzar con el html, inicializamos las sesiones y creamos una sesión que tomará el valor de la variable $form_ok, que es un valor aleatorio entre 1000 y 9999. y ese valor aleatorio también lo enviamos a través del formulario en un campo oculto.
<input type="hidden" name="fok" value="<?php echo $form_ok?>">
A vista del usuario el formulario sigue siendo idéntico al que usamos para logear un solo usuario, pero los cambios introducidos harán que su operatividad sea diferente.

Seguidamente vamos a la página reconocimiento.php, en la que realizaremos los siguientes cambios:
<?php session_start(); // Identificacion de varios usuarios sin base de datos.     // Datos provenientes del formulario     $usumail $_POST['usumail'];      $clave $_POST['clave'];          $fok $_POST['fok'];     $form_ok $_SESSION['form_ok'];    // Recuperamos la sesion      if($fok == $form_ok){     unset($_SESSION['form_ok']);    // Eliminamos la sesion           $datos_for $usumail.'|'.$clave;     // Pares usuario|clave validos     $usuarios_Ok = array(         1=>'Antonio|abc123',         2=>'Venus|Ab12',         3=>'Emma|bc23',         4=>'Marcos|aB12k',         5=>'mail@artesaniaweb.es|ttk69');                   $Usuario_Valido array_search($datos_for$usuarios_Ok);                  if($Usuario_Valido <> null){             // Datos validos             $_SESSION['datos_OK'] = 1;    // Creamos una sesion              header("Location: pagina_privada.php");         }else{             // Datos NO validos             header("Location: form_login.php");         } }else{     echo '<p>Formulario no valido</p>'; } ?>
En la recepción de datos del formulario agregamos la variable $fok que recibe el valor a través del campo oculto (hidden) y seguidamente recuperamos la sesión que creamos en el formulario.

Ahora lo que tenemos que hacer es comparar si esas dos variables tienen el mismo valor, en caso de ser igual, el formulario desde el que se envían los datos es válido, en caso contrario, no lo es, y por tanto no se comprueban los datos introducidos. Una vez hecho esto, eliminamos la variable de sesión para reiniciar un nuevo reconocimiento de formulario.

Una vez superada esta barrera de seguridad, agrupamos en una variable los datos de acceso enviados usando el separador pleca “|”, que es el mismo separador que hemos usado para separar los datos válidos.

En el artículo de referencia tenemos un solo usuario válido, pero como en este caso queremos tener mas de un usuario, debemos guardar los usuarios válidos en una variable tipo array, donde no usaremos la key 0 y comenzaremos por la 1. El motivo es que más adelante el valor 0 provocaría un comportamiento no deseado para nuestro condicional y no reconocería al usuario guardado bajo esta key o clave del array.

De esta forma, tenemos un array como este:
    $usuarios_Ok = array(         1=>'Antonio|abc123',         2=>'Venus|Ab12',         3=>'Emma|bc23',         4=>'Marcos|aB12k',         5=>'mail@artesaniaweb.es|ttk69');
Al que podemos agregar tantos usuarios como deseemos, más allá de las dificultades que podría tener administrarlo, como ya comentamos antes. Es indiferente que usemos un nombre de usuario o una dirección de e-mail, el efecto sería el mismo y además diferencia entre mayúsculas y minúsculas.

Lo siguiente seria comprobar si los datos provenientes del formulario agrupados en la variable $datos_for se encuentran en el array, si están en el array, el usuario es válido, si no se encuentra, rechazamos el acceso.

Esto lo haremos con la función nativa array_search(busca, array), que busca un elemento en un array, si el elemento existe, devuelve la key del array de ese elemento, motivo este, por el que definimos las keys del array omitiendo la de valor cero.

Esta búsqueda contenida en la variable $Usuario_Valido tendrá un valor nulo si no existe el par usuario|clave en el array, de ahí el condicional. Si existe una key creamos la sesión de identificación y enviamos al usuario a la página privada, en caso contrario, lo enviamos de nuevo al formulario de identificación.

Por lo demás, esta aplicación es idéntica a la de identificación de un solo usuario del artículo referenciado.

Algo que no se comentó en el artículo anterior fue lo relativo la duración del logeo. El logeo con el método de sesiones dura tanto como dura una variable de sesión activa, por lo general, 120 minutos, aunque eso se puede modificar, pero puede durar mas si el usuario permanece navegando por las páginas protegidas, es decir, si se detecta actividad.

Otro método de identificación es mediante el uso de cookies combinado con sesiones, este método supone que el usuario no tenga que identificarse cada vez que desea acceder al espacio privado, pero eso lo veremos en otro capítulo.
Tags: Loguear || identificar || multiusuario || aplicación || plugin

Comentarios.

Sin comentarios, publica el tuyo.