logo

Andrés es manager de ESMMUG y experto en Dreamweaver, Captivate y Contribute.

Tutoriales PHP/MySQL:
Restricción simple de usuarios con PHP y HTTP

—Por Andres Cayon

A veces, simplemente necesitamos restringir de forma sencilla el acceso a determinadas páginas. En este caso, la autnetificación por HTTP puede ser una solución eficaz que nos permite olvidarnos de control de sesiones o de cookies.

En muchas ocasiones, el control de acceso a determinadas páginas requiere bastante trabajo: manejo de sesiones, cookies… Sin embargo, PHP ofrece también la autentificación por HTTP.

La limitación de su uso viene dada por el tipo de instalación de PHP: este método sólo funcionará si PHP está instalado como mod de Apache, no como CGI (por lo tanto deberás probar antes si tu servidor lo soporta).

Las ventaja principal es su sencillez, ya que hemos preparado 2 archivos (uno con el script y otyro para configurar el documento de error) que puedes incluir directamente en todas las páginas que desees proteger utilizando simplemente un include() al archivo con el script. En el mismo, los nombres de usuario y sus contraseñas están insertados directamente, pero podría utilizarse una base de datos para obtenerlos. Sin embargo, nuestro objetivo es que fuera fácilmente configurable, comprensible y sencillo de utilizar para restricciones simples.

Al utilizarlo, el navegador mostrará una ventana de prompt solicitando el nombre de usuario y contraseña al entrar en una página restringida:

Una vez validado, el acceso a todos los documentos que incluyan la llamada al script será activado mientras la ventana del navegador permanezca abierta, sin necesidad de preocuparse de nada más. Cuando la ventana se cierre, lo hará también la sesión y se borrarán los documentos de la caché del navegador.

Este es el código del archivo a incluir, ‘php_auth.php’:

//------– INICIO PERSONALIZACION----------
//lista de usuarios: "nombre"=>"password"
$usuarios=array("tecno"=>"hola","esmmug"=>"adios"); 
//mensaje para mostrar en el prompt
$mensaje="Mi Sitio Web";
//texto a mostrar si falla el login. Se acepta html
$denegado="Acceso no autorizado";
//------– FIN PERSONALIZACION---------–
$login_status=false;
foreach($usuarios as $key=>$value){
  if($_SERVER['PHP_AUTH_USER'] == $key && $_SERVER['PHP_AUTH_PW'] == $value){
    $login_status=true;
    break;
  }
}
if ((!isset($_SERVER['PHP_AUTH_USER']))||($login_status==false)) {
  header("WWW-Authenticate: Basic realm=\"".$mensaje."\"");
  header("HTTP/1.0 401 Unauthorized");
  echo $denegado;
  exit;
}
 

Para su configuración, sólo es necesario modificar las variables en el archivo http_auth.php:

  • $usuarios: Es un array con la siguiente estructura: “nombreUsuario”=>”contraseña”.
  • $mensaje: el texto a mostrar en la ventana de prompt. En la imagen superior es “Zona Restringida para Usuarios”.;

El segundo documento, ‘denegado,htm’ es simplemente un documento html para que podáis configurar la apariencia de los mensajes de error al fallar el login de usuario.

Podeis ver un ejemplo aquí (usuario: esmmug / password: esmmug)

También existe un archivo listo para su uso:
http://www.esmmug.com/archivos/descargar.php?archivo=autentificacion_http.zip

4 Comentarios »

  1. GRACIAS POR PUBLICAR ESTA INFORMACION YA QUE ME HA SERVIDO DE MUCHO…AUQUE TENGO UN PROBLEMITA COMO LE PUEDO HACER PARA QUE AL MOMENTO DE INGRESAR A ESA PAGINA DE ACCESO NO AUTORIZADO, UNA VEZ QUE YA HE VISTO LA INFORMACION QUE EXISTE EN ESA PAGINA Y REGRESE, EN MI CASO, A LA PAGINA PRINCIPAL,AL MOMENTO QUE VUELVA A SELLECIONAR ESA OPCION DE ESA PAGINA RESTRINGIDA ME VUELVA A PEDIR LA CLAVE SIN NECESIDAD DE CERRAR LA VENTANA.

    SI NO ME ACLARAS LA DUDA DE TODAS MANERAS ME SACASTE DE MUCHAS DUDAS, DE TODAS MANERAS MUCHAS GRACIAS ES MUY BUENA ESTA INFORMACION……

    Comentario Por URIEL JOSUE VICTORIA BUSTAMANTE — 10/05/2006 @ 6:52 am

  2. Hola, he probado el ejemplo y si que me logea bien, pero cuando cierro la ventana del navegador sigo logeado y no me restringe…

    Además he puesto el autentificador en mi alojamiento web y no me funciona, como se que PHP esta instalado en mi alojamiento como mod de Apache?

    Gracias, un saludo.

    Comentario Por Chris — 23/11/2006 @ 8:49 am

  3. Hola Chris:
    Para consultas, creo que es mejor utilizar el foro:
    http://forum.dwug.es

    Comentario Por Andres Cayon — 23/11/2006 @ 10:47 am

  4. interesante eso no sabia gracias por el detalle

    Comentario Por wil — 12/07/2007 @ 11:54 pm

TrackBack URI

Deja tu comentario