Programación en castellano
Inicio > Tutoriales > Webs dinámicos con PHP
-Tutoriales

Webs dinámicos con PHP


PHP para desarrollo de aplicaciones web (II)

. La autenticación de usuarios utilizando HTTP

El protocolo HTTP proporciona un mecanismo de autenticación de clientes. Para ello hay que utilizar la cabecera de los paquetes HTTP e incluir en ellos que enviamos un paquete de autenticación. Este paquete, una vez recibido en el cliente, provocará que este obtenga de alguna forma un login y una clave del navegante. Lo más común es que se presente una cajita con dos campos: uno para introducir el login y el otro para introducir la clave. Este login y clave son enviados al servidor, el cual verificará los permisos de este usuario a través de algún sistema: bases de datos, LDAP etc.

PHP tiene una función llamada header() que permite trabajar con la cabecera de los paquetes HTTP. Es fundamental no escribir nada de código HTML antes de utilizar estas funciones, ya que en caso contrario, no sería posible modificar la cabecera del paquete HTTP y al llamada a la función header provocaría un error.

Si queremos enviar al usuario una petición de autenticación lo que hay que hacer es incluir al comienzo de la página el siguiente código:

if(!isset($PHP_AUTH_USER)) {
  Header("WWW-Authenticate: Basic realm=\"Zona protegida\"");
  Header("HTTP/1.0 401 Unauthorized");
  echo "Texto que se envía si el usuarios pulsa en botón Cancel\n";
  exit;
} else {
  echo "Hola $PHP_AUTH_USER.
";
  echo "Has introducido $PHP_AUTH_PW como tu clave.
";
}

En este sencillo ejemplo, tomado directamente del manual de PHP, lo único que se hace es presentar el login y clave introducidos por el usuario. Lo normal es que se compruebe este login y clave en una base de datos, a través de las potentes funciones de PHP, o en un servidor de LDAP o la misma base de datos de usuarios del sistema.

Una vez que el usuario se ha autenticado el cliente, estos datos se envían en todas las peticiones de páginas para esa zona protegida, por lo que en todo momento podemos saber quien está accediendo a las páginas. Es una especie de cookie que se mantiene mientras el usuario no apague el navegador o reciba un paquete de autenticación invalida. Con este sistema podemos tener una zona protegida en la que se hace un control exhaustivo de quien ha accedido a la página, a que hora, que otras páginas ha visitado de la zona protegida etc. El usuario es consciente que desde el momento que ha insertado su login y clave ha sido identificado, y que todo lo que haga puede ser registrado.

El problema con las cookies es que el usuario no es muchas veces consciente de este hecho, y el día que lo entiende, se vuelve un navegante paranoico más que cree que en todos los sitios le están controlando.

. Subida de ficheros utilizando HTTP

Uno de los servicios favoritos de todos los internautas es el intercambio de información. Y este suele ir asociado al intercambio de ficheros en un 99% de los casos. Muchas veces cuando montamos un servicio en Internet, necesitamos que el usuario pueda enviar sus ficheros al servidor: páginas web, imágenes, sonido, etc.

Como todos sabemos la solución ideal para el intercambio de ficheros es el FTP. Pero lo que los internautas están acostumbrados a utilizar es el web. Para que utilicen el FTP hay que indicarles un cliente, el navegador podría ser pero su interfaz es compleja para hacer FTP. Una vez que tienen el cliente hay que configurarlo. Y luego tienen que aprender a utilizar el programa. En muchos casos esto sólo supone la pérdida de un par de horas pero en otros, se vuelve algo complicado de lograr si el internauta no está muy formado en temas de Internet.

HTTP nos proporciona una solución ideal para simplificar este envío de ficheros desde el cliente hacia el servidor, sin salirse de la interfaz web en ningún momento. Es lo que se conoce como HTTP Upload. Con este mecanismo podemos lograr que el cliente nos envíe ficheros locales de su computador pulsando un botón.

Lo primero es crear una página HTML con un formulario en el que incluimos el widget.

    <FORM ENCTYPE="multipart/form-data" ACTION="recibe_fichero.php3" METHOD=POST>
    <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000">
    Envía este fichero: <INPUT NAME="fichero_usuario" TYPE="file">
    <INPUT TYPE="submit" VALUE="Envía Fichero">
    </FORM>

Destacar de este formulario HTML la posibilidad de restringir el tamaño del fichero que se va a enviar. El protocolo HTTP no es tan robusto como FTP para el intercambio de ficheros grandes, por lo que este sistema es muy recomendable con ficheros de cientos de kilo-bytes.

La página HTML resultante es, una vez que el usuario ha pulsado el botón de seleccionar el fichero la que se observa en la siguiente figura.

Figura 4: Selección de un fichero para enviar al servidor web

Este fichero se envía al servidor de web el cual lo reenvía al cgi que se encarga de su tratamiento, en este caso el programa PHP "recibe_fichero.php3". Este programa PHP se encarga de ir recibiendo el fichero y almacenarlo en un directorio del disco duro. Es importante tener en cuenta que el usuario que está guardando el fichero es aquel con el que se ejecuta el servidor de web por lo que deberá de tener permisos para escribir en el directorio y fichero que se utilicen.

Dentro del programa de PHP que recibe este fichero se definen una serie de variables que nos vana a permitir gestionar el fichero recibido:

  • $fichero_usuario: nombre del fichero temporal en el que se ha almacendo en el servidor el fichero enviado por el usuario. El lugar donde se guardan estos ficheros es el directorio temporal del servidor de web.
  • $fichero_usuario_name: nombre original del fichero tal y como nos lo envió el usuario
  • $fichero_usuario_size: tamaño del fichero
  • $fichero_usuario_type: el tipo MIME con el que el navegador a identificado el fichero

Con estos datos es sencillo localizar los ficheros que nos envían los clientes y colocarlos en los directorios adecuados. Podemos incluso colocarlos en unos directorios u otros según la identidad del usuario que los envíe.

Figura 5: Datos del fichero recibido

En principio este servicio se puede abrir de forma anónima, con lo que tendríamos algo muy similar a un servidor de FTP anónimo. Pero nada nos impide proteger las páginas de subida de ficheros y poder identificar al usuario que los envía. En este caso ya tenemos un servicio similar a un FTP autenticado.

El proporcionar la opción de subir los ficheros por el web a un cliente puede ser la frontera entre que nos lo envíe o no. En un mundo de portales, con cientos de servicios gratuitos, si queremos tener la esperanza de que nuestros usuarios nos envíen sus fotografías, la de los productos que meten en su tienda gratuita etc. las posibilidades de que lo logremos serán mucho más altas con este tipo de mecanismos que utilizando el protocolo FTP clásico. Y siempre se pueden dejar ambas opciones, para que los usuarios más avanzados tengan la potencia y flexibilidad de intercambiar sus ficheros con FTP.

. Conclusiones

Las funcionalidades presentadas en este artículo son básicas a la hora de crear páginas dinámicas utilizando PHP. Su dominio y su integración dentro de proyectos de Internet debe ser un objetivo dentro de la comunidad de desarrolladores PHP.

Son tecnologías muy potentes, aunque sólo constituyen la punta de todo lo que se puede hacer con el lenguaje PHP. En las próximas entregas de esta sección seguiremos presentando nuevas funciones de las amplísimas librerías de PHP, y comenzaremos a profundizar en PHP4, el producto estrella para el desarrollo de Internet de los próximos meses.

. Referencias

 
Patrocinados
 

Copyright © 1999-2007 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: musica mp3 | logos y melodias | hospedaje web linux | registro de dominios | servidores dedicados
más internet: comprar | recursos gratis | posicionamiento en buscadores | tienda virtual | gifs animados