BLOQUE 2 PHP: PROGRAMACIÓN ORIENTADO A OBJETOS
¡Construyendo componentes!
PHP Como lenguaje orientado a objetos
Autentificación
Ficheros de usuarios
- crea un fichero llamado misUsuarios y añade 3 usuarios maria/maria nieves/nieves sara/sara. Se indica usuario/password
- Posteriormente visualiza el contenido del fichero
- Observa cómo la pass aparece cifrada
- Modo de actuación
1.- Primero nos ubicamos en el directorio donde queramos añadir o crear el fichero
cd /home/MiUsuario
MiUsuario es vuestro propio directorio
2.-Ahora creamos un directorio para guardar esta información y nos movemos en él
mkdir usuarios
cd usuarios
3.-Una vez correctamente ubicados generamos el fichero de las password con la herramienta htpasswd
La primera vez con opción -c para crear el fichero
htpasswd -c misUsuarios maria
htpasswd misUsuarios nieves
htpasswd misUsuarios nieves
5.- Crea una página index.html que contenga un texto
4.- Crea un fichero .haccess en el directorio y especifica la directivas necesarias para que al acceder a la página index.html te solicite credenciales
|
Accediendo con php a la autentificación
- Modifica la página restringida para ver el usuario y password así como el método usado de autentifiación
- El código que habría que añadir:
|
Ejercicio 3: Accesos restringidos
- Utilizando la autentificción de usuario y pass en el servidor y ficheros .htaccess,
- Crea un fichero de contraseñas llamado misUsuarios con por ejemplo 5 usuarios (alicia, sara, jorge, paula, manolo)
- Crea un fichero de grupos con por 1 grupo (grupo_familia) al que pertenecerán sara, alicia y paula)
- Crea un sencillo sitio web que me redirija a 4 páginas:
- Información General : Tendrá acceso todo el mundo
- Información restringida: Sólo tenrán acceso los usuarios creados en el fichero misUsuarios
- Información Sara : Tendrá acceso solo el usuario sara
- Información de grupo : Tendrá acceso los usuarios 3 usuarios de los 5 creados (sara alicia y paula).
- Cada página simplemente contredrá un texto en h1
|
Cookies
Controlando accesos
- Solo queremos permitir tres intentos de acceso
- El usuario puede intentar acceder hasta tres veces seguidas a un sitio web de forma incorrecta
- Para acceder ha de insertar igual password que usuario (mismo valor)
- Para controlar los acceso anotaremos en cookies los intentos que lleva (Claramente es un ejercicio forzado, no podría ser en un caso real)
- Si lleva 3 accesos incorrectos, mostraremos un mensaje de que el acceso ha sido bloqueado y dejaremos un botón para reiniciar los intentos.
- Una vez que acceda de forma correcta, volverá a tener hasta 3 intentos para la próxima vez que acceda
- Se mantiene el bloqueo durante 5 minutos.
|
Horas de acceso por usuario
- Realiza una aplicación con un formulario con un único input que sea nombre
- Cada vez que introduzca un nombre la aplicación almacenará con una cookie la hora a la que ese usuario accedión
- Además visualizará todos los accesos de ese usuario indicando las horas a las que lo hizo y un listado con el resto de usuarios que se conectando indicando el total de accesos de cada usuario (no la hora).
|
Secciones de un periódico
- Crea una pagina que simule ser la de un periódico. La misma debe permitir configurar que tipo de titular deseamos que aparezca al visitarla, pudiendo ser:
- Noticia política.
- Noticia económica.
- Noticia deportiva.
- Mediante tres objetos de tipo radio, permitir seleccionar que titular debe mostrar el periódico.
- Almacenar en una cookie el tipo de titutar que desea ver el cliente.
- La primera vez que visita el sitio deben aparecer los tres titulares.
|
Establecer preferencias
Mostramos un menú con una serie de preferencias para el usuario según el menú que vemos en la imagen siguiente
- El idioma puede haber hasta 3
- En perfil público (si/no)
- Zona horaria (GMT-2 GMT-1 GMT GMT+1 GMT+2)
- Una vez establecidos, las podremos visualizar o bien borrar
|
Sesiones
Localiza variables de sesión
Variables de sesión
- Localiza y actualiza estas directivas en tu fichero de configuración
- coméntalas con tus palabras en dicho fichero
|
Ejercicio 1 Cuenta visitas
- Haz un programa que te cuente cuantas visitas recibe la página
- Puedes poner un botón submit para recargar la página.
- Indica mediane mensaje si accedes haciendo un click, o bien escribiendo la url
- Contabiliza todos los accesos (por click o escribiendo la url en el navegado).
|
Ejercicio 2: Fechas de cada visita
- Modifica el programa anterior para almacenar el momento en el cual se produjo cada visita
- Anota hora, minuto y segundo
- Visualiza todas las conexiones y el momento en el que se produjeron
|
Control de acceso con autentificación
- Crea una página similar a la anterior usada en cookies,
- Almacena en la sesión de usuario los instantes de todas sus últimas visitas.
- Si es su primera visita, muestra un mensaje de bienvenida.
- En caso contrario, muestra la fecha y hora de todas sus visitas anteriores. Añade un botón a la página que permita borrar el registro de visitas.
- Utiliza también una variable de sesión para comprobar si el usuario se ha autentificado correctamente. De esta forma no hará falta comprobar las credenciales con la base de datos constantemente.
- Propuesta de solución
<?php
// Si el usuario aún no se ha autentificado, pedimos las credenciales
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="Contenido restringido"');
header("HTTP/1.0 401 Unauthorized");
exit;
}
// Vamos a guardar el usuario en una variable de sesión
// si no existe, aún no se ha autentificado
session_start();
if (!isset($_SESSION['usuario'])) {
// Aquí podríamos conectar a una vbase de satos para ver recuperar datos de la base de datos
//y verificar si hay o no concordancia.
$autentificado=false;
if ($_SERVER['PHP_AUTH_USER']=="manolo" AND $_SERVER['PHP_AUTH_PW']=="manolo")
$autentificado=true;
// Si no existe, se vuelven a pedir las credenciales
if ($autentificado == false) {
header('WWW-Authenticate: Basic realm="Contenido restringido"');
header("HTTP/1.0 401 Unauthorized");
exit;
} else
$_SESSION['usuario'] = $_SERVER['PHP_AUTH_USER'];
}
}
// Si ya está autentificado
else {
// Comprobamos si se ha enviado el formulario de limpiar el registro
if (isset($_POST['limpiar']))
unset($_SESSION['visita']);
else
$_SESSION['visita'][] = time();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "
http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Ejemplo Tema 4: Cookies en autentificación HTTP</title><link href="dwes.css" rel="stylesheet" type="text/css">
</head>
<body>
<?php
if ($error == null) {
echo "Nombre de usuario: " . $_SERVER['PHP_AUTH_USER'] . "<br />";
echo "Hash de la contraseña: " . md5($_SERVER['PHP_AUTH_PW']) . "<br />";
if (count($_SESSION['visita']) == 0)
echo "Bienvenido. Esta es su primera visita.";
else {
date_default_timezone_set('Europe/Madrid');
foreach ($_SESSION['visita'] as $v)
echo date("d/m/y \a \l\a\s H:i", $v) . "<br />";
?>
<form id='vaciar' action='<?php echo $_SERVER['PHP_SELF']; ?>' method='post'>
<input type='submit' name='limpiar' value='Limpiar registro'/>
</form>
<?php
}
} else
echo "Se ha producido el error $error.<br />";
?>
</body>
</html>
|
Más ejercicios para practicar
Ejercicios:
|
Cookies
Almacenar el momento de las visitas a una página
Cookies con momento de visita
- En una página llamada registro.php , almacena en una cookie el último instante en la que se visitó la página.
- Si es su primera visita, muestra un mensaje de bienvenida.
- En caso contrario, muestra la fecha y hora de su anterior visita.
- Deberás utilizar la función setcookie para guardar el instante de su anterior visita y mostrar su contenido utilizando el array $_COOKIE.
- Posible solución
- Tomado el ejemplo anterior (de autentificación), habría que añadir el siguiente código
if($resultado->num_rows == 0) {
//......
else {
if (isset($_COOKIE['ultimo_login'])) {
$ultimo_login = $_COOKIE['ultimo_login'];
}
setcookie("ultimo_login", time(), time()+3600);
}
//..... y una vez dentro de la página
if (isset($ultimo_login))
echo "Ultimo login: " . date("d/m/y \a \l\a\s H:i", $ultimo_login);
else
echo "Bienvenido. Esta es su primera visita."
|