32
1 / 32 UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS COMPUTACIÓN CICLO: 01/2019 GUIA DE LABORATORIO #10 Nombre de la Practica: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Lugar de Ejecución: Centro de cómputo Tiempo Estimado: 2 horas con 30 minutos MATERIA: Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor DOCENTES: Ing. Ricardo Ernesto Elías / Ing. Miguel Eduardo G. Orellana I. OBJETIVOS Que el estudiante: Comprender el proceso de autenticar a un usuario para darle o negarle acceso a una página web. Emplear la técnica de redirección para redirigir a los usuarios a una página distinta a la solicitada si no se autentican correctamente. Emplear variables de sesión para proteger las páginas web de un sitio. Hacer uso de funciones de PHP para manejo de sesiones y de la matriz superglobal $_SESSION. II. INTRODUCCION TEORICA Preservar el estado en una aplicación web En una aplicación web, se cuenta con una serie de páginas web o secuencias de comando (scripts) escritos en algún lenguaje del lado del servidor que en mayor o menor medida, podrían estar relacionadas. La característica de estas secuencias de comando es que cada vez que se ejecutan comienzan con un “borrón y cuenta nueva”, esto se debe al modelo de petición-respuesta del protocolo HTTP, caracterizado también por ser un protocolo sin estado (stateless), lo que significa que nunca se almacena información acerca de preferencias del usuario, número de accesos, recursos visitados, etc. PHP proporciona tres mecanismos para almacenar información entre distintas peticiones HTTP dentro de una aplicación web: 1. Paso de información común en controles ocultos y cadenas de consulta (query strings). 2. Utilización de cookies. 3. Trabajo con sesiones Paso de información común en controles ocultos y cadenas de consulta (query string) Las primeras aplicaciones web dinámicas del lado del servidor, implementaron esta solución. El mecanismo utilizado es enviar los datos que son compartidos por varias páginas en cada petición realizada por el cliente y en cada respuesta ejecutada por el servidor. Cookies en PHP Básicamente, las cookies son archivos de texto ASCII que almacenan información siguiendo una estructura básica de pares, de la forma: identificador = valor. El tamaño de un archivo de cookie es relativamente pequeño, no superando los 4 Kb. El modo en que se almacenan, el directorio en el que se guardan y el resto de características propias de una operación de lectura/escritura sobre disco dependen en gran manera del sistema operativo y del navegador que se utilice para navegar en la aplicación web.

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

1 / 32

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS

COMPUTACIÓN

CICLO: 01/2019

GUIA DE LABORATORIO #10

Nombre de la Practica: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Lugar de Ejecución: Centro de cómputo

Tiempo Estimado: 2 horas con 30 minutos

MATERIA: Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor

DOCENTES: Ing. Ricardo Ernesto Elías / Ing. Miguel Eduardo G. Orellana

I. OBJETIVOS Que el estudiante:

• Comprender el proceso de autenticar a un usuario para darle o negarle acceso a una página web.

• Emplear la técnica de redirección para redirigir a los usuarios a una página distinta a la solicitada si no se autentican correctamente.

• Emplear variables de sesión para proteger las páginas web de un sitio.

• Hacer uso de funciones de PHP para manejo de sesiones y de la matriz superglobal $_SESSION.

II. INTRODUCCION TEORICA Preservar el estado en una aplicación web En una aplicación web, se cuenta con una serie de páginas web o secuencias de comando (scripts) escritos en algún lenguaje del lado del servidor que en mayor o menor medida, podrían estar relacionadas. La característica de estas secuencias de comando es que cada vez que se ejecutan comienzan con un “borrón y cuenta nueva”, esto se debe al modelo de petición-respuesta del protocolo HTTP, caracterizado también por ser un protocolo sin estado (stateless), lo que significa que nunca se almacena información acerca de preferencias del usuario, número de accesos, recursos visitados, etc. PHP proporciona tres mecanismos para almacenar información entre distintas peticiones HTTP dentro de una aplicación web: 1. Paso de información común en controles ocultos y cadenas de consulta (query strings). 2. Utilización de cookies. 3. Trabajo con sesiones Paso de información común en controles ocultos y cadenas de consulta (query string) Las primeras aplicaciones web dinámicas del lado del servidor, implementaron esta solución. El mecanismo utilizado es enviar los datos que son compartidos por varias páginas en cada petición realizada por el cliente y en cada respuesta ejecutada por el servidor. Cookies en PHP Básicamente, las cookies son archivos de texto ASCII que almacenan información siguiendo una estructura básica de pares, de la forma: identificador = valor. El tamaño de un archivo de cookie es relativamente pequeño, no superando los 4 Kb. El modo en que se almacenan, el directorio en el que se guardan y el resto de características propias de una operación de lectura/escritura sobre disco dependen en gran manera del sistema operativo y del navegador que se utilice para navegar en la aplicación web.

Page 2: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 2

La posibilidad de hacer uso de cookies depende de que el navegador cuente con la característica de usar cookies y que además, esa característica esté habilitada. La estructura básica de una cookie se muestra en la siguiente tabla:

Elemento Significado

Nombre Indica el nombre que se le ha dado a la cookie.

Valor Indica el valor de la cookie; es decir, el contenido que tiene.

Caducidad Indica cuál es el tiempo de validez de la cookie.

Dominio Indica el rango de dominios en los cuales es válida la cookie.

Ruta Contiene el directorio a partir del cual la cookie tiene validez.

Seguro Indica que la cookie será transmitida únicamente por un canal seguro SSL.

Es muy importante tomar en cuenta que todo el tratamiento de las cookies se realiza en la cabecera del mensaje HTTP y, por tanto, deben ser manejadas antes de que se envíe cualquier otra información al navegador; es decir, la parte del cuerpo del mensaje HTTP; de lo contrario se obtendrá un error. Utilización de cookies en PHP PHP dispone de una sola función para el manejo básico de cookies. Su sintaxis se muestra a continuación: bool setcookie(string $name [, string $value [, int $expire [, string $path [, string $domain

[, bool $secure = false [, bool $httponly = false]]]]]]);

Creación de cookies Como se puede observar en la sintaxis de la función setcookie(), cada uno de los argumentos coincide con los elementos que componen la estructura básica de una cookie. También puede observar que el único argumento obligatorio es el nombre de la cookie, el resto son opcionales. Sin embargo, en el caso de la creación, también será necesario que se le asigne un valor inicial. Eliminación de cookies Para borrar una cookie se utiliza la misma función que para crearla: setcookie(), enviando como único parámetro en la llamada el nombre de la cookie.

setcookie("nombre_cookie");

Consultar contenidos de una cookie Para poder acceder a los contenidos de una cookie se utiliza la matriz superglobal asociativa $_COOKIE. Esta matriz contiene todas las variables pasadas a través de cookies, tal y como sucede con las matrices superglobales $_POST y $_GET. En versiones anteriores a la versión 4.2.0 de PHP se utiliza la matriz superglobal $HTTP_COOKIE_VARS. Ejemplo: En el siguiente ejemplo se muestra cómo crear un seguimiento del número de accesos a una página de un sitio web. Primer script: <?php

$accesos = 1;

if(isset($_COOKIE['num_accesos'])){

$accesos = $_COOKIE['num_accesos'] + 1;

}

setcookie("num_accesos", $accesos, time() + 3600);

?>

<!DOCTYPE html>

<html lang="es">

<head>

<meta charset="utf-8" />

<title>Control de accesos al sitio web</title>

Page 3: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 3

</head>

<body>

<div id="info">

<h2>Trabajando con cookies</h2>

<h3>Contador de accesos</h3>

<?php

if($accesos > 1):

echo "Has ingresado a esta página <em>" . $accesos . "</em> veces";

else:

echo "Es la primera vez que accedes a esta página";

endif;

?>

<br /><br />

<a href="<?php echo $_SERVER['PHP_SELF']; ?>">Actualizar</a>

<a href="eliminarcookies.php">Eliminar</a>

</div>

</body>

</html>

Segundo script: <?php

//Eliminar la cookie

setcookie("num_accesos");

?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html>

<head>

<title>Eliminar cookies</title>

</head>

<body>

<div id="info">

<h2>Trabajando con cookies</h2>

<h3>Contador de accesos borrado</h3>

<br /><br />

<pre>

<a href="accesoscookies.php">Volver</a>

</pre>

</div>

</body>

</html>

Autenticación de usuarios La autenticación de usuarios es uno de los retos importantes a nivel de páginas web ya que este proceso permitirá tener sitios web mucho más seguros, sobre todo si estos manejan información confidencial. La autenticación o autentificación consiste principalmente en verificar la identidad del usuario que pretende ingresar a un sitio web; es decir, comprobar que es quien dice ser. Se tienen varias estrategias de autenticación de usuarios, entre ellas: a) Autenticación HTTP con Apache Web Server b) Autenticación HTTP con PHP c) Autenticación con variables de sesión de PHP Aunque el primero y segundo método pueden resultar útiles para proteger carpetas o algunos scripts, se vuelven poco funcionales a medida que el sitio crece en tamaño. Por esta razón para sitios web complejos con

Page 4: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 4

un número muy grande de scripts lo recomendable es utilizar el método de autenticación con sesiones auxiliado con datos de usuarios almacenados en bases de datos. Esto es el mejor método de autenticación de usuarios a nivel de web. Autenticación HTTP con Apache Web Server El servidor Apache incorpora una gran cantidad de módulos de autenticación diferentes que pueden ser utilizados para controlar el acceso a los archivos y páginas web alojadas en dicho servidor. El módulo más sencillo de utilizar es el módulo mod_auth que opera comparando pares de nombre y contraseña con líneas de un archivo de texto incluido en el servidor, donde aparecen los usuarios y contraseñas de los usuarios autorizados a navegar en una carpeta del servidor. Las directivas necesarias para configurar el acceso con autenticación deben ser introducidas en el archivo de configuración principal del servidor (para nuestro caso Apache, en el archivo httpd.conf) o en archivos de configuración almacenados en carpetas o directorios específicos (.htaccess). En esta práctica de laboratorio abordaremos el segundo método. Para esto se requerirá que en el archivo de configuración del servidor web (httpd.conf) se edite dentro de la sección <Directory /> … </Directory> de dicho archivo la línea donde aparece la directiva AllowOverride, la cual es utilizada para indicar cuáles directivas, en caso de existir, pueden ser colocadas en los archivos de configuración por directorios o carpetas. Localice la sección siguiente dentro del archivo de configuración de su servidor httpd.conf: <Directory />

Options FollowSymLinks

AllowOverride None

Order deny,allow

Deny from all

Satisfy all

</Directory>

La línea destacada en negrita y color diferente debe ser cambiada por la siguiente: AllowOverride AuthConfig, de modo que se archivo de configuración debería lucir de la siguiente forma: <Directory />

Options FollowSymLinks

# AllowOverride None

AllowOverride AuthConfig

Order deny,allow

Deny from all

Satisfy all

</Directory>

Donde se ha colocado en comentario la línea original AllowOverride None y se ha agregado la nueva línea AllowOverride AuthConfig. Luego, guarde esta modificación y reinicie el servidor web para que el cambio tenga efecto. El siguiente paso es la creación del archivo .htaccess, en donde se proporcionará la información sobre quiénes pueden tener acceso al sitio web (o al directorio actual y sus subdirectorios). Un archivo .htaccess es básicamente un archivo de texto que contiene, entre otras cosas: un nombre para el área restringida que se especifica con una directiva AuthName "nombre del área". A continuación debe indicarse con una directiva AuthType el tipo de autenticación. Por ejemplo: AuthType Basic. El siguiente paso debe ser indicarle a Apache dónde está alojado el archivo con las credenciales del usuario (nombre y contraseña). Esto se hace con la directiva AuthUserFile ruta_archivo_credenciales. Más adelante crearemos este archivo de credenciales. Por ahora, debemos tener en cuenta que no es recomendable almacenar este archivo de credenciales de usuario(s) dentro de la carpeta web del servidor, si no en un nivel superior. En nuestro caso, sería afuera de la carpeta www. Pero garantizando que se tiene acceso a la carpeta en la que se guardará el archivo de credenciales. Otro paso sería indicarle a Apache qué usuarios serán admitidos en el sitio web. Podemos indicar esto con la directiva require valid-user. Un último detalle, elegante por cierto, sería cargar una página de rechazo a un usuario que intente cargar una página sin proporcionar las credenciales o con credenciales no válidas. Para esto se debe crear la página

Page 5: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 5

web e indicar en el archivo .htaccess cuál es esa página. Debe utilizarse una directiva ErrorDocument 401 /ruta/pagina.html para realizar esta funcionalidad. Al unir todo lo anterior nos resulta un archivo como el siguiente: AuthName "Musica Salsa"

AuthUserFile C:/wamp/privado/users.txt

AuthType Basic

require valid-user

ErrorDocument 401 /carpetasegura/rejection.html

Sólo falta explicar cómo se creará el archivo con las credenciales. El aspecto de este archivo será similar a las líneas que se muestran a continuación: ricardo:$apr1$Ri5.....$nrK6qKm0oT1cQUS8m6HcZ1

william:$apr1$ek5.....$qZJoVODN8374zOpAXAbXZ1

Para su creación se debe utilizar un programa ejecutable denominado htpasswd.exe que se almacena en la carpeta bin de su directorio Apache. Para distribuciones de Apache que viene junto con el Wamp Server, esta carpeta está en Apache2/bin. Por lo que para ejecutarlo debe cambiarse al directorio bin y desde allí digitar el comando que se muestra a continuación en la consola:

Como puede observar el comando es htpasswd, a continuación se proporcionan algunos parámetros opcionales. Para el caso del comando anterior se ha utilizado –m, para que se encripten las contraseñas ingresadas por el usuario, y –c para crear un nuevo archivo. El resto es la ruta y el nombre del archivo. Puede observar que se está subiendo dos niveles desde la ubicación actual, que es c:\wamp\Apache2\bin. Es decir, se creará una carpeta denominada privado dentro de la carpeta Wamp. El nombre del archivo será users.txt, tal y como se especificó en el archivo de configuración .htaccess. Para agregar nuevos usuarios al mismo archivo, debe omitir el parámetro –c y utilizar siempre –m para que las contraseñas se almacenen de forma encriptada. Autenticación HTTP con PHP Este método consiste en comprobar las credenciales del usuario dentro del mismo código PHP. En otras palabras no será necesario modificar ningún archivo de configuración dentro del servidor web. Sin embargo, será necesario enviar ciertos encabezados especiales al servidor web. Estos encabezados son: header("WWW-Authenticate:Basic realm=\"Protected Area\"");

header("HTTP/1.0 401 Unauthorized");

El código 401 del protocolo HTTP significa no autorizado, ante lo cual el navegador debería presentar un diálogo de autenticación. Algunos navegadores lo mostrarán un número infinito de veces hasta que se introduzcan los datos correctos, otros, como el Internet Explorer solo lo harán 3 veces, después de lo cual lanzará el mensaje de usuario no autorizado. Para realizar este tipo de autenticación es preciso utilizar la matriz superglobal $_SERVER para examinar el valor de sus índices PHP_AUTH_USER y PHP_AUTH_PW que contienen el usuario y la contraseña que ha introducido un usuario en la ventana modal del explorador.

Page 6: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 6

Si se desea un script que tome en cuenta si se está ejecutando PHP en un servidor web Apache o Internet Information Server, deberá ejecutar un código que conllevar mayor complejidad, sobre todo por el uso de otra variable de servidor como $_SERVER['HTTP_AUTHORIZATION'], si es que está disponible. Esta variable contiene una cadena que inicia con Basic y luego de un espacio en blanco, una cadena codificada en base 64, con el nombre de usuario y la contraseña ingresada por este. El código puede ser como el mostrado a continuación: <?php

if(isset($_SERVER['PHP_AUTH_USER'])){

$user = $_SERVER['PHP_AUTH_USER'];

$pass = $_SERVER['PHP_AUTH_PW'];

}

elseif(isset($_SERVER['HTTP_AUTHORIZATION'])){

if(substr($_SERVER['HTTP_AUTHORIZATION'], 0, 5) == "Basic"){

$userpass = split(":", base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));

$user = $userpass[0];

$pass = $userpass[1];

}

}

if(isset($user)){

echo "Username / Password: ";

echo htmlspecialchars($user) . "" . htmlspecialchars($pass);

}

else{

header("WWW-Authenticate:Basic realm=\"Protected Area\"");

header("HTTP/1.0 401 Unauthorized");

}

?>

Autenticación con sesiones Una definición simple de lo que es una sesión sería el tiempo que un usuario permanece conectado a un sitio web. Una definición más técnica y relacionada a la programación sería: “una sesión es un bloque de información que almacena todo tipo de variables y valores relacionados con los usuarios y sus visitas a un sitio web en particular”. Lo que una sesión posibilita es la capacidad de guardar variables (incluyendo matrices y clases) entre ejecuciones de scripts para poder acceder a estas desde cualquier página donde se inicie sesión. Una sesión contiene un identificador en forma de cadena de caracteres para asociarlo al usuario que accede al sitio web. Esta cadena es conocida como el ID de sesión e identifica de forma única cada sesión. Dentro de un script PHP este identificador único puede ser referido mediante la siguiente cadena SID. El seguimiento de los usuarios mediante sesiones puede hacerse de dos formas: 1. Almacenando y recuperando el ID de sesión (SID) en una cookie. El funcionamiento se puede

resumir así, cuando un usuario visita el sitio se genera un SID y se almacena dentro de una cookie enviada de forma automática por el servidor web a cada cliente que accede al sitio. Este método puede fallar en el caso que el usuario deshabilite las cookies. Además, representa un riesgo de seguridad porque alguien malintencionado podría falsificar las cookies y conseguir un acceso virtual a la cuenta de cualquier usuario registrado.

2. Incluyendo el ID de sesión (SID) en la URL. Este es un método comparativamente más difícil que el anterior, pero permite utilizar esta característica en cualquier situación, incluso cuando las cookies están deshabilitadas. Puede añadirse el SID (manualmente o de forma automática) a la URL actual.

Page 7: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 7

Para incluir manualmente el SID a la URL debe escribirse una instrucción como la que se muestra en el siguiente ejemplo: <A href=”test.php?<?=SID?>”>Haga clic aquí para visitar la siguiente p&aacute;gina</A>

Para hacer que el SID se añada de forma automática a la URL debe compilar PHP con la siguiente opción: Enable-trans-id

El funcionamiento de una sesión se puede describir de la siguiente forma: “cuando un usuario se conecta a un sitio web, el ID de sesión (SID) se envía a la computadora del cliente. Si se tiene habilitado el uso de cookies en el cliente el SID se envía al usuario en una cookie llamada PHPSESSID. En el servidor también es almacenado ese SID en forma de archivo temporal La necesidad de las sesiones surge de la naturaleza del protocolo HTTP, que es un protocolo sin estado, lo que significa que no dispone de un método incorporado para conservar el estado entre dos transacciones. Esto es lo que provoca que cuando un usuario solicita una página y luego otra, no exista manera de que el servidor entienda que ambas solicitudes provienen de un mismo usuario, de modo que todas las variables de un script son reestablecidas siempre después de una solicitud. El control de la sesión consiste en poder realizar un seguimiento del usuario mientras se mantenga navegando por el sitio web, permitiendo mostrar contenido de las páginas en función de su nivel de autorización o de sus preferencias personales. Los pasos básicos para poder implementar un sitio web con manejo de sesiones son los siguientes:

• Iniciar la sesión

• Registrar las variables de sesión necesarias

• Utilizar las variables de sesión en todos los scripts que lo requieran

• Anular las variables registradas

• Eliminar la sesión Iniciar la sesión Existen dos formas de iniciar sesiones en PHP: La primera es utilizando la función session_start(), con la cual se puede crear un identificador de sesión nuevo, o retomar un id de sesión creado previamente. Se requiere que utilice la llamada a esta función al inicio de todas las secuencias de comando que vayan a utilizar sesiones. La segunda forma, consiste en configurar el archivo php.ini para que inicie sesiones de forma automática cuando alguien visite el sitio. Para ello se debe asignar el valor de uno a la variable de configuración session.auto_start, cuyo valor por defecto es cero. Este método tiene el inconveniente que no permite utilizar objetos como variables de sesión. Registrar las variables de sesión Debe utilizarse la matriz superglobal $_SESSION para crear una variable de sesión. Una variable de sesión se crea cuando se coloca como índice de la matriz superglobal $_SESSION el nombre de alguna variable, pero sin el símbolo de dólar. Esto es similar a como se crean variables pasadas por la URL con la matriz superglobar $_GET o campos de formulario con el método POST utilizando la matriz superglobal $_POST. Un ejemplo de registro de una variable de sesión es el siguiente: $_SESSION['estado'] = 1;

$_SESSION['page'] = $pagina;

$_SESSION['nameusr']=$row['nom'] . " " . $row['ape'];

$_SESSION['perfil'] = $row->perfil;

Page 8: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 8

$_SESSION['photo'] = $preferencias['img'];

Utilizar variables de sesión Es preciso para poder acceder a los valores almacenados en variables de sesión iniciar el script con una llamada a la función session_start(). Si se utiliza un objeto como variable de sesión, es preciso incluir la definición de la clase antes de invocar a la función session_start() para volver a cargar las variables de sesión. De esta forma PHP sabe cómo reconstruir el objeto de sesión. Debe prestar atención a verificar si las variables de sesión están registradas o no. Puede utilizar para ello las funciones isset() o empty(). Por ejemplo: isset($_SESSION['name']);

Anular las variables de sesión Si ya no se va a utilizar una variable de sesión es aconsejable anular su registro. Esto ayudará a liberar recursos del servidor. Para anular el registro de una variable de sesión puede utilizar la función unset. Ejemplo: unset($_SESSION['page']);

NOTA IMPORTANTE: El uso de las funciones session_unregister() y session_unset() ya no es necesario ni recomendable. Para anular el registro de todas las variables utilice: $_SESSION = array();

Eliminar la sesión Cuando la sesión se termine debe anular el registro de todas las variables de sesión y a continuación invocar la función session_destroy(). La llamada a esta función borra el id de sesión. IMPORTANTE: A pesar de que es una práctica recomendada anular el registro de variables de sesión y destruir la sesión, cuando se cierre la ventana del navegador las sesiones serán destruidas automáticamente por PHP cuando se acabe el script o cuando se cierre la ventana del navegador.

III. MATERIALES Y EQUIPO Para la realización de la guía de práctica se requerirá lo siguiente:

No. Requerimiento Cantidad

1 Guía de práctica #10: Protocolo HTTP, autenticación de usuarios cookies y sesiones 1

2 Computadora con Wamp Server y Sublime Text instalados 1

3 Memoria USB o disco flexible 1

IV. PROCEDIMIENTO Digite los scripts que se enumeran a continuación y guárdelos en el formato apropiado como páginas .html o como scripts .php según se indique. Ejercicio #1: El siguiente ejercicio implementa la autenticación básica con PHP. Script 1: autenticacionbasica.php <?php

//Para trabajar con sesiones

Page 9: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 9

session_start();

//Si el usuario está usando IIS, se necesita establecer

//las variables globales $PHP_AUTH_USER y $PHP_AUTH_PW

if(substr($_SERVER['SERVER_SOFTWARE'], 0, 9) == 'Microsoft' &&

!isset($_SERVER['PHP_AUTH_USER']) && !isset($_SERVER['PHP_AUTH_PW']) &&

substr($_SERVER['HTTP_AUTHORIZATION'], 0, 6) == 'Basic '){

list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':',

base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));

}

//Si no se está usando un archivo con usuario y contraseña en el servidor

//utilizar estos datos de usuario y contraseña

if($_SERVER['PHP_AUTH_USER'] != 'dawsis' || $_SERVER['PHP_AUTH_PW'] != 'ingenieria'){

//Si el visitante no ha introducido sus datos o si los

//datos proporcionados no son correctos redirigirlo a

//la ventana de autenticación básica HTTP

header('WWW-Authenticate: Basic realm="Realm-Name"');

if(substr($_SERVER['SERVER_SOFTWARE'],0,9) == 'Microsoft'){

header('Status: 401 Unauthorized');

}

else{

header('HTTP/1.0 401 Unauthorized');

}

$msgden = "<h2 style=\"font-family:Impact;font-size:15pt;color:Red;\">";

$msgden .= "No tienes acceso a este sitio</h2>";

echo $msgden;

}

else{

//Si estamos acá es porque el usuario introdujo los datos correctos

$_SESSION['user'] = $_SERVER['PHP_AUTH_USER'];

$_SESSION['pass'] = $_SERVER['PHP_AUTH_PW'];

header("Location: material.php");

}

?>

Script 2: material.php <?php

session_start();

if(!isset($_SESSION['user']) || !isset($_SESSION['pass'])){

header("Location: autenticacionbasica.php");

}

else{

?>

<!DOCTYPE html>

<html lang="es">

<head>

<meta charset="utf-8" />

<title>Descarga de materiales de la materia LIS</title>

<link rel="stylesheet" media="screen" href="css/enlaces.css" />

</head>

<body>

<header>

<h1>Lenguajes Interpretados en el Servidor</h1>

</header>

<section>

<article>

<div id="login">

<p>

<a href="logout.php">Cerrar sesión</a>

</p>

</div>

<h3>Clases</h3>

<ul class="navi">

<li>

Page 10: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 10

<a href="http://www.mediafire.com/download/ccyra1rm614t05a/Clase+01+-

+Programaci%C3%B3n+web+del+lado+del+servidor+-+2014.pdf" target="_blank">

Clase 01: Programación web del lado del servidor

</a>

</li>

<li>

<a href="http://www.mediafire.com/download/4le9g50t1d3wng1/Clase+02+-

+Introducci%C3%B3n+a+la+programaci%C3%B3n+y+sintaxis+de+PHP+-+2014.pdf" target="_blank">

Clase 02: Introducción a la programación y sintaxis de PHP

</a>

</li>

<li>

<a href="http://www.mediafire.com/download/9zg2du274b6d3fu/Clase+03+-

+Estructuras+de+control+sentencias+condicionales+y+repetitivas+-+2014.pdf"

target="_blank">

Clase 03: Estructuras de control - Sentencias condicionales y repetitivas

</a>

</li>

</ul>

<h3>Guías de práctica</h3>

<ul class="navi">

<li>

<a href="http://www.udb.edu.sv/udb_files/recursos_guias/informatica-

tecnologico/desarrollo-de-aplicaciones-web-con-software-interpretado-en-el-

servidor/2019/i/guia-1.pdf" target="_blank">

Guía 01: Introducción a la Progamación web con PHP

</a>

</li>

<li>

<a href="http://www.udb.edu.sv/udb_files/recursos_guias/informatica-

tecnologico/desarrollo-de-aplicaciones-web-con-software-interpretado-en-el-

servidor/2019/i/guia-2.pdf" target="_blank">

Guía 02: Estructuras de Control - Sentencias condicionales y repetitivas

</a>

</li>

<li>

<a href="http://www.udb.edu.sv/udb_files/recursos_guias/informatica-

tecnologico/desarrollo-de-aplicaciones-web-con-software-interpretado-en-el-

servidor/2019/i/guia-3.pdf" target="_blank">

Guía 03: Matrices y funciones en PHP

</a>

</li>

</ul>

<h3>Sitios web</h3>

<ul class="navi">

<li>

<a href="http://www.php.net/manual/es" target="_blank">

Sitio web oficial de PHP

</a>

</li>

<li>

<a href="http://www.manualdephp.com/section/manual-de-php/" target="_blank">

Manual de PHP

</a>

</li>

</ul>

</article>

</section>

</body>

</html>

<?php

}

?>

Page 11: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 11

Script 3: logout.php <?php

session_start();

unset($_SESSION['user']);

unset($_SESSION['pass']);

session_destroy();

?>

<!DOCTYPE html>

<html lang="es">

<head>

<meta charset="utf-8" />

<title>Fin de la sesión</title>

</head>

<body>

<header>

<h1>Has salido del sistema</h1>

</header>

<section>

<article>

<p>

Para reingresar haz clic en <a href="autenticacionbasica.php">

este enlace</a>.

</p>

</article>

</section>

</body>

</html>

Después de iniciar sesión en una ventana emergente del navegador:

Page 12: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 12

Ejercicio #2: El siguiente ejercicio muestra cómo crear una página web que requiera autenticación de usuarios a través de un archivo de texto. En este archivo con los usuarios se almacena el nombre de usuario y su contraseña encriptada. Para crear los usuarios se ejecuta el script createusers.php y para ingresar a la página protegida se utiliza el script authfile.php Script 1: createusers.php <!DOCTYPE html>

<html lang="es">

<head>

<meta charset="utf-8" />

<title>Autenticación de usuarios</title>

</head>

<body>

<section>

<article>

<?php

if(isset($_POST['user']) && isset($_POST['pass'])){

$pwfile = fopen("users.txt", "a");

fputs($pwfile, $_POST['user'] . ":" . crypt($_POST['pass'], "pw") . "\n");

fclose($pwfile);

?>

Usuario

<?php

echo htmlspecialchars($_POST['user']) . ":" . crypt($_POST['pass'], "pw");

?>

Agregado.

<?php

}

?>

<form method="POST" action="<?= $_SERVER['PHP_SELF'] ?>">

<label for="user">Usuario</label>

<input type="text" name="user" size="25" maxlength="30" /><br />

<label for="pass">Contraseña</label>

<input type="password" name="pass" size="25" maxlength="30" /><br />

<input type="submit" name="enviar" value="Crear usuario" />

Page 13: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 13

</form>

</article>

</section>

</body>

</html>

Script 2: authfile.php <?php

if(isset($_SERVER['PHP_AUTH_USER'])){

$user = $_SERVER['PHP_AUTH_USER'];

$pass = $_SERVER['PHP_AUTH_PW'];

}

elseif(isset($_SERVER['HTTP_AUTHORIZATION'])){

if(substr($_SERVER['HTTP_AUTHORIZATION'], 0, 5) == "Basic"){

$userpass = explode(":", base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));

$user = $userpass[0];

$pass = $userpass[1];

}

}

else{

$user = "";

}

$auth = false;

$pwfile = fopen("users.txt", "r");

while(!feof($pwfile)){

$data = explode(":", rtrim(fgets($pwfile, 1024)));

if($user == $data[0] && crypt($pass, "pw") == $data[1]){

$auth = 1;

break;

}

}

fclose($pwfile);

if(!$auth){

header("WWW-Authenticate: Basic realm=\"Protected Area\"");

header("HTTP/1.0 401 Unauthorized");

}

else{

echo "<h3 style=\"font:bold 15pt Impact;color:Green;\">Bienvenido, $user!</h3>";

}

?>

Debe ejecutar primero el script createusers.php y agregar un nuevo usuario. Para esta prueba se creó el usuario dawsis con la contraseña ingenieria:

A continuación, debe desde el navegador cargar la página authfile.php e iniciar sesión con uno de los usuarios que haya agregado con createusers.php para que la aplicación le de un mensaje de bienvenida. Si no ingresa correctamente el usuario y la contraseña, la aplicación no le dará la bienvenida.

Page 14: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 14

Ejercicio #3: Implementación de un carrito de compra básico usando variables de sesión, cadenas de consulta (querystring) y base de datos. Script 1: index.php <?php

session_start();

$mysqli = new mysqli("localhost", "root", "", "productoscart");

if(isset($_POST["add_to_cart"])){

if(isset($_SESSION["shopping_cart"])){

// Se usa la función array_column() para devolver los valores de

// una sola columna de la matriz de entrada que se corresponderá

// con el campo de la base de datos

$item_array_id = array_column($_SESSION["shopping_cart"], "item_id");

if(!in_array($_GET["id"], $item_array_id)){

$count = count($_SESSION["shopping_cart"]);

$item_array = array(

'item_id' => $_GET["id"],

'item_name' => $_POST["hidden_name"],

'item_brand' => $_POST["hidden_brand"],

'item_price' => $_POST["hidden_price"],

'item_quantity' => $_POST["quantity"]

);

$_SESSION["shopping_cart"][$count] = $item_array;

}

else{

echo '<script>alert("El producto ya se encuentra agregado")</script>';

}

}

else{

$item_array = array(

'item_id' => $_GET["id"],

'item_name' => $_POST["hidden_name"],

'item_brand' => $_POST["hidden_brand"],

'item_price' => $_POST["hidden_price"],

'item_quantity' => $_POST["quantity"]

);

$_SESSION["shopping_cart"][0] = $item_array;

}

}

// En caso que la URL lleve en el querystring la variable delete

// recorrer y extraer los índices y valores de la variable de sesión

if(isset($_GET["action"])){

if($_GET["action"] == "delete"){

foreach($_SESSION["shopping_cart"] as $keys => $values){

if($values["item_id"] == $_GET["id"]){

unset($_SESSION["shopping_cart"][$keys]);

echo '<script>alert("Producto eliminado")</script>';

echo '<script>window.location="index.php"</script>';

}

}

}

}

?>

<!DOCTYPE html>

<html lang="es">

Page 15: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 15

<head>

<title>Carro de Compra Simple con PHP y MySQL</title>

<link rel="stylesheet"

href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />

</head>

<body>

<div class="container" style="width:960px;">

<h3 align="center">Carro de Compra Simple con PHP y MySQL</h3>

<?php

$query = "SELECT * FROM productos ORDER BY id ASC";

$result = $mysqli->query($query);

if($result->num_rows > 0){

while($row = $result->fetch_array(MYSQLI_ASSOC)){

?>

<div class="col-md-3">

<!-- Se hace, a la vez, un envío por el método POST y por el método GET.

En el método POST va la cantidad del producto seleccionado, en tanto

que por GET se envía la acción a realizar y el id del producto sobre

cuyo botón se hace clic -->

<form method="POST" action="<?php echo $_SERVER['PHP_SELF'];?>?action=add&id=<?php echo

$row["id"]; ?>">

<div class="thumbnail">

<img src="<?php echo $row["image"]; ?>" class="img-responsive" />

<div class="caption">

<h4 class="text-info text-center"><?php echo

htmlspecialchars($row["name"]); ?></h4>

<h4 class="text-uppercase text-center"><?php echo

htmlspecialchars($row["brand"]); ?></h4>

<h4 class="text-danger text-center">$ <?php echo $row["price"]; ?></h4>

<input type="text" name="quantity" class="form-control" value="1" />

<p class='text-center'>

<input type="submit" name="add_to_cart" class="btn btn-success"

value="Agregar al carro" />

</p>

<!-- El nombre del producto, la marca y el precio individual del mismo se

envían

mediante campos ocultos de formulario, extrayendo sus valores

concretos de la base de datos productoscart -->

<input type="hidden" name="hidden_name" value="<?php echo

htmlspecialchars($row["name"]); ?>" />

<input type="hidden" name="hidden_brand" value="<?php echo

htmlspecialchars($row["brand"]); ?>" />

<input type="hidden" name="hidden_price" value="<?php echo $row["price"];

?>" />

</div>

</div>

</form>

</div>

<?php

}

}

?>

<div style="clear:both"></div>

<h3>Detalle de la orden</h3>

<div class="table-responsive">

<table class="table table-bordered">

<tr>

<th width="38%">Descripción</th>

<th width="10%" class='text-center'>Cantidad</th>

<th width="14%" class='text-right'>Marca</th>

<th width="18%" class='text-right'>Precio</th>

<th width="13%" class='text-right'>Total</th>

<th width="7%">Acción</th>

Page 16: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 16

</tr>

<?php

// Si el carrito de compra no está vacío recorrer su contenido

// extrayendo el id de producto y el resto de la información

if(!empty($_SESSION["shopping_cart"])){

$total = 0;

foreach($_SESSION["shopping_cart"] as $keys => $values){

?>

<tr>

<td><?php echo $values["item_name"]; ?></td>

<td class='text-center'><?php echo $values["item_quantity"]; ?></td>

<td class='text-right'><?php echo $values["item_brand"]; ?></td>

<td class='text-right'>$ <?php echo $values["item_price"]; ?></td>

<td class='text-right'>$ <?php echo number_format($values["item_quantity"] *

$values["item_price"], 2); ?></td>

<td><a href="index.php?action=delete&id=<?php echo $values["item_id"];

?>"><span class="text-danger">Eliminar</span></a></td>

</tr>

<?php

$total += ($values["item_quantity"] * $values["item_price"]);

}

?>

<tr>

<td colspan="4" align="right">Total</td>

<td align="right">$ <?php echo number_format($total, 2); ?></td>

<td>&nbsp;</td>

</tr>

<?php

}

?>

</table>

</div>

</div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>

<script

src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>

</body>

</html>

Al visualizarlo en el navegador:

Page 17: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 17

Ejercicio #4: El siguiente ejemplo implementa la autenticación de usuarios utilizando el método de las variables de sesión. Archivo 1: login.php <!DOCTYPE html>

<html lang="es">

<head>

<meta charset="utf-8" />

<title>Autenticación PHP</title>

<link rel="stylesheet" href="css/modernform.css" />

</head>

<body>

<header>

<h1>Formulario de inicio de sesión</h1>

</header>

<section>

<article>

<?php

if(isset($_GET["errorusuario"]))

if($_GET["errorusuario"]=="si"){

?>

<span class="error">

Datos incorrectos

</span>

<?php

}

else{

?>

<span class="msg">

Introduce tu nombre de usuario y contraseña

</span>

<?php

}

?>

<div class="container">

<section class="tabblue">

<ul class="tabs blue">

<li>

<input type="radio" name="tabs blue" id="tab1" checked="">

<label for="tab1">Inicio de sesión</label>

<div id="tab-content1" class="tab-content">

<p>

Ingrese sus datos de usuario.

</p>

<form name="frmclass" id="classname" action="autenticacion.php"

method="POST">

<span class="tabaddon"><i class="fa fa-user fa-2x"></i></span>

<input type="text" name="usuario" id="usuario" placeholder="(Ingrese su

usuario)" required class="field" />

<span class="tabaddon"><i class="fa fa-degree fa-2x"></i></span>

<input type="password" name="contrasena" id="constrasena"

placeholder="(Ingrese su contraseña)" required class="field" />

<div class="btn">

<input type="submit" name="btnSend" id="btnSend" value="Ingresar"

/>

</div>

</form>

</div>

</li>

</ul>

</section>

</div>

Page 18: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 18

<p>

Debes estar registrado en el sistema para poder ingresar.

Si no estás registrado consulta al administrador, cómo

obtener tu usuario y contraseña.

</p>

</article>

</section>

</body>

</html>

Archivo 2: autenticacion.php <?php

session_start();

//Conectando a base de datos

$con = new mysqli("localhost", "root", "", "users");

//Verificar si la conexión fue exitosa

if($con->conect_errno) die("Error de conexión: (" . $con->errno . ") " . $con->error);

$con->set_charset("utf8");

//Escapar datos del formulario

$usuario = $con->real_escape_string(trim($_POST['usuario']));

$contrasena = $con->real_escape_string(trim($_POST['contrasena']));

//Preparando la consulta que se va a ejecutar

$qr = "SELECT usuario, contrasena, nombre, apellido ";

$qr .= "FROM usuario WHERE usuario = ? AND contrasena = ?";

$sql = $con->prepare($qr);

$sql->bind_param("ss", $usuario, $contrasena);

$sql->execute();

//Asociando a variables los datos solicitados en la consulta SELECT

$sql->bind_result($user, $password, $name, $lastname);

//Preparando las variables de sesión con los datos

//obtenidos desde la base de datos con bind_result

while($sql->fetch()){

$_SESSION["autenticado"] = "si";

$_SESSION["usuario"] = $user;

$_SESSION["nombreusr"] = $name . " " . $lastname;

}

//Redirigiendo al usuario a la página de inicio

//si el registro de las variables de sesión fue exitoso

//o de otro modo mandarlo de nuevo a la página de login

if(count($_SESSION) > 0){

header("Location: home.php");

}

else {

header("Location: login.php?errorusuario=si");

}

?>

Archivo 3: home.php <?php

//Se manejarán sesiones por lo tanto incluir librería de seguridad

require_once('seguridad.php');

function __autoload($class_name){

require("class/" . $class_name . ".class.php");

}

//Definiendo opciones del menú principal en una matriz asociativa que

Page 19: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 19

//será pasada como tercer argumento en el constructor de la clase Page

$menu = array(

"home.php" => "Inicio",

"ingreso.php" => "Proceso de ingreso",

"documentos.php" => "Documentos de ingreso",

"costos.php" => "Costos",

"salir.php" => "Salir"

);

//Creando una página, instanciando la clase page

$homepage = new page("Nuevo Ingreso - UDB", "Nuevo Ingreso, Nuevo Ingreso UDB, Proceso de

nuevo ingreso, Estudiante de nuevo ingreso", $menu);

$homepage->content = <<<PAGE

<div class="rediv" id="contenido">

<h4>

<span>Bienvenido {$_SESSION['nombreusr']} </span>

</h4>

<p>

<img src="imagenes/foto_indexflt.jpg" width="715" height="400" />

</p>

<p>&nbsp;</p>

<p>

<strong>Enlaces de interés:</strong>

<div id="divfootimg" class="rediv">

<a href="http://www.udb.edu.sv/udb/index.php/pagina/ver/pago_en_linea"

target="_blank">

<img src="imagenes/footimg3.jpg" width="150" height="75" border="0" />

</a>

</div>

<div id="divfootimg" class="rediv">

<a href="http://cnap.udb.edu.sv" target="_blank">

<img src="imagenes/footimg2.jpg" width="150" height="75" border="0" />

</a>

</div>

<div id="divfootimg" class="rediv">

<a href="http://www.udb.edu.sv/udb/index.php/pagina/ver/progyserv_coordidiomas"

target="_blank">

<img src="imagenes/aprendeidiomas.png" width="150" height="75" border="0" />

</a>

</div>

<div id="divfootimg" class="rediv">

<a href="http://www.udb.edu.sv/udb/index.php/pagina/ver/live-edu" target="_blank">

<img src="imagenes/footimg6.jpg" width="150" height="75" border="0" />

</a>

</div>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

PAGE;

echo $homepage->display();

?>

Archivo 4: seguridad.php <?php

//Inicio la sesión

session_start();

//Comprueba si el usuario está autenticado, haciendo uso de

//la variable de sesión $_SESSION['autenticado']

if ($_SESSION["autenticado"] == "si") {

//No es necesario realizar acción alguna

}

else{

Page 20: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 20

//si el usuario no está autenticado

//redirigirlo a la página de inicio de sesión

header("Location: login.php");

//salimos de este script

exit();

}

?>

Archivo 5: salir.php <?php

session_start();

session_destroy();

?>

<!DOCTYPE html>

<html lang="es">

<head>

<meta charset="utf-8" />

<title>Contenido no seguro</title>

<link rel="stylesheet" href="css/incripcion_css.css" />

<link rel="stylesheet" href="css/font-league-gothic.css" />

</head>

<body>

<section>

<article>

<div id="boardgame">

<h3>

Ahora estás fuera de la aplicación segura.

</h3>

</div>

</article>

</section>

<br />

<br />

<a href="login.php">Iniciar sesión</a>

</body>

</html>

Archivo 6: menu.php <?php

//Definiendo opciones del menú principal en una matriz asociativa que

//será pasada como tercer argumento en el constructor de la clase Page

$menu = array(

"home.php" => "Inicio",

"ingreso.php" => "Proceso de ingreso",

"documentos.php" => "Documentos de ingreso",

"costos.php" => "Costos",

"salir.php" => "Salir"

);

?>

Archivo 7: costos.php <?php

//Se manejarán sesiones por lo tanto incluir librería de seguridad

require_once('seguridad.php');

function __autoload($class_name){

require("class/" . $class_name . ".class.php");

}

//Incluyendo la matriz con las opciones de menú

//donde está definida la matriz $menu que se envía

Page 21: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 21

//como tercer argumento del constructor de la clase Page

require_once('menu.php');

//Creando una página, instanciando la clase page

$homepage = new page("Costos - Nuevo Ingreso UDB", "Costos de Nuevo Ingreso, Costos para

alumnos de Nuevo Ingreso UDB, Costos de Ingreso", $menu);

$homepage->content = <<<PAGE

<table border="1">

<caption>

<span>Bienvenido {$_SESSION['nombreusr']} </span>

</caption>

<thead>

<tr>

<th style="background-color:#05A9FF;color:White;">Pagos a

realizar:</th>

<th style="background-color:#05A9FF;color:White;text-

align:center;width:16%;">TMA</th>

<th style="background-color:#05A9FF;color:White;text-

align:center;width:20%;">Otras carreras</th>

</tr>

</thead>

<tbody>

<tr>

<td>Paquete informativo</td>

<td class="price">$&nbsp;12.00</td>

<td class="price">$&nbsp;12.00</td>

<tr>

<tr>

<td>Costos de ingreso* (otras carreras)</td>

<td class="price">&ndash;</td>

<td class="price">$&nbsp;70.00</td>

<tr>

<tr>

<td>Curso de Inducci&oacute;n a la Vida Universitaria (TMA)</td>

<td class="price">$&nbsp;30.00</td>

<td class="price">&ndash;</td>

<tr>

<tr>

<td>Matr&iacute;cula (TMA)</td>

<td class="price">$&nbsp;75.00</td>

<td class="price">&ndash;</td>

<tr>

<tr>

<td>Mensualidad</td>

<td class="price">$&nbsp;133.00</td>

<td class="price">Cuota diferenciada</td>

<tr>

<tr>

<td>

Otros servicios<br />

(Incluye: Seguro colectivo de accidentes personales, uso

de biblioteca, talonario, carn&eacute;,

cat&aacute;logo institucional, gu&iacute;a

estudiantil, uso de Internet).

</td>

<td class="price">$&nbsp;44.00</td>

<td class="price">$&nbsp;44.00</td>

<tr>

<tr>

<td>

Laboratorios (importe que se cancela una vez al inicio

del ciclo en materias espec&iacute;ficas

Page 22: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 22

del plan de estudio de la carrera que cursas. Consulta

en Escuelas):<br />

<ul>

<li>Laboratorios TMA</li>

<li>Laboratorios Tecnol&oacute;gico</li>

<li>Laboratorios de Ingenier&iacute;a y

Licenciatura</li>

<li>Pr&aacute;ctica Docente (Profesorados y

Licenciaturas)</li>

<li>Pr&aacute;ctica en Ortesis y

Pr&oacute;tesis</li>

<li>Ingl&eacute;s T&eacute;cnico TMA</li>

</ul>

</td>

<td colspan="2" style="text-align:center">

<br />

<br />

<br />

$&nbsp;&nbsp;38.00<br />

$&nbsp;&nbsp;33.00<br />

$&nbsp;&nbsp;43.00<br />

$&nbsp;&nbsp;17.00<br />

$119.30<br />

$&nbsp;&nbsp;28.00<br />

</td>

</tr>

</tbody>

</table>

<p>(*) Los costos de ingreso dan derecho al Curso de Inducci&oacute;n a la Vida

Universitaria,

pruebas diagn&oacute;sticas y matr&iacute;cula. No se devuelven si el alumno no

se inscribe

en la Universidad.<br />

<!-- (**) La carrrera de Ingenier&iacute;a Aeron&aacute;utica tiene una cuota

m&iacute;nima de $150.00. -->

</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

PAGE;

echo $homepage->display();

?>

Base de datos: Para poder realizar el ejercicio necesitará crear una base de datos con una sola tabla. Llame a la base de datos users, tal y como se indica en el script autenticacion.php en este ejercicio. Luego cree una tabla que llamará usuario con la siguiente estructura:

Page 23: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 23

NOTA: El campo usuario es llave o clave primaria en esta tabla. Luego, ingrese estos cuatro registros:

Puede utilizar el phpMyAdmin o la consola MySQL para crear la base de datos, crear la estructura de la tabla e ingresar los registros o combinar ambas, queda a su criterio. Al visualizar en el navegador intentando ingresar a la dirección: http://localhost/lis/ciclo012016/guias/guia10/ejemplo4/home.php El navegador lo redirigirá a la página de login.php

En la base de datos observará los usuarios con los que puede iniciar sesión en el sistema. Una vez que lo haga podrá ingresar a la página home.php

Page 24: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 24

Al dar clic en la opción de menú Salir, se cerrará la página y será redirigido a una página que le indica que ha cerrado la sesión y por tanto está fuera del sistema. Tendrá que volver a ingresar sus datos para volver a la página home.php.

Ejercicio #5: El siguiente ejemplo, nos muestra cómo crear un sistema de auto-registro de usuarios usando PHP. Cada usuario que se registra es agregado a la base de datos para que luego pueda acceder al sitio web seguro (en este caso una simple página web). Se ha creado una mini-aplicación en donde el primer paso debe ser autoregistrarse en la opción de menú Registro. A continuación se debe probar si el registro se realizó correctamente, en la opción de menú login. Script 1: index.php <?php

session_start();

?>

<!DOCTYPE html>

<html lang="es">

<head>

<meta charset="utf-8" />

<title>Registro de usuarios</title>

<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" />

</head>

<body>

<?php include "php/navbar.php"; ?>

Page 25: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 25

<div class="container">

<div class="row">

<div class="col-md-12">

<h2>REGISTRO Y LOGIN BÁSICO</h2>

<p class="lead">Sistema de Registro y Login Sencillo con PHP y MySQL</p>

<p>Les presento <b>rl-php</b> un sistema de registro y login sencillo.</p>

<p>Instrucciones:</p>

<ol>

<li>Registrate en la opción de registro.</li>

<li>Inicie sesión en la opción de login.</li>

<li>Para finalizar la sesión, click en la opción salir .</li>

</ol>

<br />

<ul type="none">

<li>

<i class="glyphicon glyphicon-ok"></i> Facil de instalar y

modificar

</li>

<li>

<i class="glyphicon glyphicon-ok"></i> Ideal para tu proximo proyecto web

</li>

</ul>

</div>

</div>

</div>

</body>

</html>

Script 2: login.php <?php session_start(); ?>

<html>

<head>

<meta charset="utf-8" />

<title>Formulario de Registro</title>

<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">

</head>

<body>

<?php include "php/navbar.php"; ?>

<div class="container">

<div class="row">

<div class="col-md-6">

<h2>Login</h2>

<form role="form" name="login" action="php/login.php" method="post">

<div class="form-group">

<label for="username">Nombre de usuario o email</label>

<input type="text" class="form-control" id="username" name="username"

placeholder="Nombre de usuario">

</div>

<div class="form-group">

<label for="password">Contrase&ntilde;a</label>

<input type="password" class="form-control" id="password" name="password"

placeholder="Contrase&ntilde;a">

</div>

<button type="submit" class="btn btn-default">Acceder</button>

</form>

</div>

</div>

</div>

<script src="js/valida_login.js"></script>

</body>

</html>

Page 26: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 26

Script 3: registro.php <?php session_start(); ?>

<html>

<head>

<meta charset="utf-8" />

<title>Formulario de Registro</title>

<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">

</head>

<body>

<?php include "php/navbar.php"; ?>

<div class="container">

<div class="row">

<div class="col-md-6">

<h2>Registro</h2>

<form role="form" name="registro" action="php/registro.php" method="post">

<div class="form-group">

<label for="username">Nombre de usuario</label>

<input type="text" class="form-control" id="username" name="username"

placeholder="Nombre de usuario">

</div>

<div class="form-group">

<label for="fullname">Nombre Completo</label>

<input type="text" class="form-control" id="fullname" name="fullname"

placeholder="Nombre Completo">

</div>

<div class="form-group">

<label for="email">Correo Electronico</label>

<input type="email" class="form-control" id="email" name="email"

placeholder="Correo Electronico">

</div>

<div class="form-group">

<label for="password">Contraseña</label>

<input type="password" class="form-control" id="password" name="password"

placeholder="Contraseña">

</div>

<div class="form-group">

<label for="confirm_password">Confirmar Contraseña</label>

<input type="password" class="form-control" id="confirm_password"

name="confirm_password" placeholder="Confirmar Contraseña">

</div>

<button type="submit" class="btn btn-default">Registrar</button>

</form>

</div>

</div>

</div>

<script src="js/valida_registro.js"></script>

</body>

</html>

Script 4: home.php <?php

session_start();

if(!isset($_SESSION["user_id"]) || $_SESSION["user_id"]==null){

print "<script>alert(\"Acceso invalido!\");window.location='login.php';</script>";

}

?>

<!DOCTYPE html>

<html lang="es">

<head>

<title>.: HOME :.</title>

<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" />

</head>

Page 27: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 27

<body>

<?php include "php/navbar.php"; ?>

<div class="container">

<div class="row">

<div class="col-md-6">

<h2>Bienvenido</h2>

</div>

</div>

</div>

</body>

</html>

Script 5: php/conexion.php <?php

$host="localhost";

$user="root";

$password="";

$db="myapp";

$con = new mysqli($host, $user, $password, $db);

if(!$con->connect_error){

$con->set_charset('utf8');

}

else{

echo "Se ha producido el siguiente error en la conexión: " . $con->connect_error;

}

?>

Script 6: php/login.php <?php

if(!empty($_POST)){

if(isset($_POST["username"]) && isset($_POST["password"])){

if($_POST["username"] != ""&&$_POST["password"]!=""){

include "conexion.php";

$user_id=null;

$sql1= "select * from user where (username=\"$_POST[username]\" or

email=\"$_POST[username]\") and password=\"$_POST[password]\" ";

$query = $con->query($sql1);

while ($r=$query->fetch_array()) {

$user_id=$r["id"];

break;

}

if($user_id==null){

print "<script>alert(\"Acceso

invalido.\");window.location='../login.php';</script>";

}

else{

session_start();

$_SESSION["user_id"]=$user_id;

print "<script>window.location='../home.php';</script>";

}

}

}

}

?>

Script 7: php/navbar.php <nav class="navbar navbar-default" role="navigation">

<div class="container">

Page 28: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 28

<!-- Brand and toggle get grouped for better mobile display -->

<div class="navbar-header">

<button type="button" class="navbar-toggle" data-toggle="collapse" data-

target=".navbar-ex1-collapse">

<span class="sr-only">Toggle navigation</span>

<span class="icon-bar"></span>

<span class="icon-bar"></span>

<span class="icon-bar"></span>

</button>

<a class="navbar-brand" href="./"><b>MYAPP</b></a>

</div>

<!-- Collect the nav links, forms, and other content for toggling -->

<div class="collapse navbar-collapse navbar-ex1-collapse">

<ul class="nav navbar-nav">

<?php if(!isset($_SESSION["user_id"])):?>

<li><a href="./registro.php">REGISTRO</a></li>

<li><a href="./login.php">LOGIN</a></li>

<?php else:?>

<li><a href="./php/logout.php">SALIR</a></li>

<?php endif;?>

</ul>

</div><!-- /.navbar-collapse -->

</div>

</nav>

Script 8: php/registro.php <?php

if(!empty($_POST)){

if(isset($_POST["username"]) && isset($_POST["fullname"])

&& isset($_POST["email"]) && isset($_POST["password"])

&& isset($_POST["confirm_password"])){

if($_POST["username"] != "" && $_POST["fullname"] != ""

&& $_POST["email"] != "" && $_POST["password"]!=""

&& $_POST["password"] == $_POST["confirm_password"]){

include "conexion.php";

$found=false;

$sql1= "SELECT * FROM user WHERE username=\"$_POST[username]\" OR

email=\"$_POST[email]\"";

$query = $con->query($sql1);

while($r=$query->fetch_array()) {

$found=true;

break;

}

if($found){

print "<script>alert(\"Nombre de usuario o email ya estan

registrados.\");window.location='../registro.php';</script>";

}

$sql = "INSERT INTO user(username,fullname,email,password,created_at)

VALUES

(\"$_POST[username]\",\"$_POST[fullname]\",\"$_POST[email]\",\"$_POST[password]\",NOW())";

$query = $con->query($sql);

if($query!=null){

print "<script>alert(\"Registro exitoso. Proceda a

logearse\");window.location='../login.php';</script>";

}

}

}

}

Page 29: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 29

?>

Script 9: php/logout.php <?php

session_start();

session_destroy();

print "<script>window.location='../login.php';</script>";

?>

Al visualizar el ejemplo en el navegador:

Page 30: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 30

Ejercicio #6: El siguiente ejemplo ilustra cómo utilizar una clase para crear una aplicación que implemente un captcha que permita verificar que quién ingrese datos a un formulario sea una persona y no un programa automatizado. Script 1: captchaform.php <!DOCTYPE html>

<html lang="es">

<head>

<meta charset="utf-8" />

<title>Probar que eres humano</title>

</head>

<body>

<section>

<article>

<?php

if(!empty($_POST['enviar'])){

session_start();

if($_SESSION['captcha'] == $_POST['text']):

echo "El texto ingresado es correcto";

exit();

else:

echo "El texto ingresado es incorrecto";

endif;

}

?>

<form action=<?php echo $_SERVER['PHP_SELF'] ?> method="POST">

<img src="captcha.php" alt="Palabra secreta" title="Palabra secreta" /><br />

<input type="text" name="text" maxlength="20" required="required" /><br />

<input type="submit" name="enviar" value="Ingresar palabra secreta" />

</form>

</article>

</section>

</body>

</html>

Script 2: captcha.class.php <?php

class captcha {

Page 31: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 31

//Propiedad de la clase

private static $caracteres =

"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%&?+-*/";

//Métodos de la clase

private function texto($long = 8){

$texto = "";

for($i=0; $i<$long; $i++){

$texto .= self::$caracteres{rand(0,strlen(self::$caracteres))};

}

return $texto;

}

public function captcha($w=150, $h=30){

session_start();

$_SESSION['captcha'] = self::texto();

$captcha = imagecreate($w, $h);

$colorfondo = imagecolorallocate($captcha, 30, 30, 60);

$colortexto = imagecolorallocate($captcha, 240, 240, 210);

$colorlinea = imagecolorallocate($captcha, 180, 180, 180);

imageline($captcha, 0, 9, 150, 9, $colorlinea);

imageline($captcha, 0, 15, 150, 15, $colorlinea);

imageline($captcha, 0, 20, 150, 20, $colorlinea);

imagestring($captcha, 5, 30, 5, $_SESSION['captcha'], $colortexto);

//Generando los encabezados HTTP para la imagen

header("Content-type: image/png");

imagepng($captcha);

imagedestroy($captcha);

}

}

?>

Script 3: captcha.php <?php

require("captcha.class.php");

$captcha = new captcha();

?>

Al visualizar en el navegador de su preferencia:

V. DISCUSION DE RESULTADOS 1. Realice un script que interactuando con bases de datos permita autenticar a un usuario enviándolo a una

página de inicio de sesión con el formulario de login si el usuario no es autenticado correctamente o a una página de bienvenida donde se debe mostrar también algún tipo de información en el caso que se autentique correctamente. Utilice redirección para poder enviar al usuario a una página de login. Además, implemente un formulario para crear usuarios y contraseñas en la base de datos. Las contraseñas deben ser encriptadas (usando los nuevos métodos de encriptación de contraseñas proporcionados en PHP que mejoran la seguridad con las funciones password_hash() y password_verify(). Tendrá que investigar en ese punto). Considere este hecho al hacer la validación de un usuario que desea ingresar al sitio web. La página

Page 32: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones Desarrollo de Aplicaciones Web con Software Interpretado

Guía #10: Protocolo HTTP, Autenticación de usuarios, cookies y sesiones

Desarrollo de Aplicaciones Web con Software Interpretado en el Servidor 32

de bienvenida al sitio debe mostrar, utilizando variables de sesión, el nombre completo del usuario autenticado. Toda la lógica de base de datos debe implementarla con la extensión PDO.

2. En el ejercicio 4 del procedimiento se muestra un menú en el lado izquierdo con las opciones: Inicio, Proceso de ingreso, Documentos de ingreso, Costos y Salir, donde se pudo dar cuenta que solamente la página de Inicio (home.php) estaba implementada usando el enfoque Orientado a Objetos. Implemente los enlaces para el resto de las opciones del menú con programación PHP Orientada a Objetos que muestren la información adecuada (puede tomar la información de este sitio web http://www.udb.edu.sv/nuevoingreso/inicio.html, considerando solo las opciones que están disponibles en el ejemplo), pero haga que todas las páginas estén protegidas, de modo que solamente cuando el usuario haya iniciado sesión y la mantenga activa pueda navegar en ellas. El intento de acceder directamente a las páginas a los que apuntan los enlaces del Proceso de ingreso, Documentos de ingreso y costos sin haber iniciado sesión debe redirigir a los usuarios al formulario de inicio de sesión. En todas estas páginas debe aparecer un enlace de cerrar sesión que permita al usuario salir del sitio web tal y como está en la página inicio.php en este ejemplo.

VI. BIBLIOGRAFIA

• Cabezas Granado, Luis Miguel. PHP 6 Manual Imprescindible. 1ra. Edición. Editorial Anaya Multimedia. Madrid, España. 2010.

• Matt Doyle. Fundamentos PHP Práctico. 1ra. Edición. Editorial Anaya Multimedia. Madrid, España 2010.

• F. Javier Gil Rubio / Santiago Alonso Villaverde. Creación de sitios web con PHP5. 1ra Edición. Editorial McGraw-Hill. España, 2006.

• Welling, Luke / Thomson, Laura. Desarrollo web con PHP y MySQL. Traducción de la 3ra Edición en inglés. Editorial Anaya Multimedia. 2005. Madrid, España.

• Gutierrez, Abraham / Bravo, Ginés. PHP 5 a través de ejemplos. 1ra Edición. Editorial Alfaomega. Junio 2005. México.

• John Coggeshall. LA BIBLIA DE PHP 5. 1ra. Edición. Editorial Anaya Multimedia. Madrid, España 2005.

• Sitio web: http://es.php.net/manual/es/features.sessions.php. Sitio web oficial de PHP.