BLOQUE 2 PHP: PROGRAMACIÓN ORIENTADO A OBJETOS
¡Construyendo componentes!
PHP Como lenguaje orientado a objetos
Autentificación
Ficheros de usuarios
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
|
Leer con php datos de la autentificación
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:
<?php
echo "te has autentificado como:<br/>";
echo "Usuario: ". $_SERVER['PHP_AUTH_USER']."<br/>";
echo "Password: ". $_SERVER['PHP_AUTH_PW']."<br/>";
echo "Tipo de autentificacion: ". $_SERVER['AUTH_TYPE'];
?>
|
Accesos Restringidos
Accesos restringidos
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)
Tip: Ten en cuenta los propietarios de la carpeta (el grupo que pertenezca a www-data
|
Controlando accesos
Controlando accesos
Haz un programa en el que controlemos que el usuario con tu nombre y la misma password pueda acceder
Solo se dejarán 3 intentos si al tercer intento no lo consigue se le anulará la posibilidad de seguir intentándolo
Tip: En seguida veremos las variables de sesión, pero aún hay que recurrir a los campos ocultos, que muchas veces serán muy útiles :)
|
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
|
Cuenta de visitas
Actividad
- Haz un programa que te cuente cuantas visitas recibe la página
- Posible solución
<? session_start();
if (!isset($_SESSION["visitas"])){
$_SESSION["visitas"] = 1;
}else{
$_SESSION["visitas"]++;
}
?>
<html>
<head>
<title>Contar páginas vistas por un usuario en toda su sesión</title>
</head>
<body>
<?
echo "Desde que entraste has visto " . $_SESSION["visitas"] . " páginas";
?>
<br>
<br>
<a href="otracuenta.php">Ver otra página</a>
</body>
</html>
|
Almacena las fechas de cada visita
Modifica el programa anterior para almacenar el momento en el cual se produjo cada visita
<?php
// Iniciamos la sesión o recuperamos la anterior sesión existente
session_start();
// En cada visita añadimos un valor al array "visitas"
$_SESSION['visitas'][] = mktime();
?>
|
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."
|
Coockies de secciones
Actividad
- 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.
Posible código |
---|
<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
<head>
<meta charset="UTF-8">
<title></title>
<link rel=stylesheet href="estilo.css" type = text/css />
</head>
<body>
<?php
//Primero leo la cookie por si existe
$opcion = $_COOKIE['seccion'];
//Si he dado borrar cookie, la borro y anulo el valor de la variable
//que contiene la cookie para la ejecución acutal
if (isset($_POST['borrar'])) {
setcookie('seccion', $opcion, time() - 1);
$opcion = null;
}
//Si he dado enviar es para guardar la cookie
//La leo del input radio y me guardo ese valor
//en una variable para el script actual
if (isset($_POST['enviar'])) {
$opcion = $_POST['seccion'];
setcookie('seccion', $opcion, time() + 3600);
}
//Si no hay cookie muestro los radio, si no no los muestro
//(Decisión personal...)
if ($opcion == null) {
?>
<h3>Si quieres especifica tu sección favorita y solo verás esa</h3>
<form action ="." method="POST">
<input type="radio" name="seccion" value="noticias">Noticias<br />
<input type="radio" name="seccion" value="deporte">Deporte<br />
<input type="radio" name="seccion" value="economia">Economía<br />
<input type="submit" value="Recordar" name="enviar">
<hr /><br /><br />
</form>
<?php
//Si sí que hay cookie y no muestro las opciones de radio
//Muestro un botón para borrar cookie
} else {
?>
<h1> En tu última selección de sección seleccionaste <strong><?php echo $opcion ?> </strong> </h1>
<form action='.' method='POST'><input type='submit' value='Borrar Cookie' name='borrar'>
<hr /><br /><br />
</form>
<?php
}
//En cada caso mostraré esta sección del supuesto periódico
//Si es la sección de la cookie (en cuyo caso solo mostraré esta)
//O si no hay cookie las voy a mostar todas, y por lo tanto también esta ...
if (($opcion == 'noticias') || ($opcion == null)):
?>
<div id = "secciones">
<h2>Noticias</h2>
<p>
La realidad virtual, además de verse y oírse, ahora puede tocarse.
Un grupo de estudiantes del London’s Royal College of Art han creado
un traje que permite sentirla a través del tacto.
Utiliza solenoides, dispositivos que producen
campos magnéticos a partir de corrientes eléctricas.
En este caso crean los campos a partir de diferentes sonidos,
cuyas vibraciones se sienten en la piel.
Las distintas frecuencias y ondas sonoras provocan sensaciones variadas.
</p>
</div>
<?php
endif;
if (($opcion == 'economia') || ($opcion == null)):
?>
<div id = "secciones">
<h2>Economía</h2>
<p>
La actividad económica española, medida por el producto interior bruto
(PIB), se multiplicó por 50 entre 1850 y 2015,
lo que supone una tasa acumulativa anual del 2, 4%.
Pero, ¿en qué medida afectó a las condiciones de vida de la población?
Dado que la población se triplicó, el PIB real por habitante
aumentó alrededor de 16 veces,
creciendo anualmente, en promedio, al 1, 7%, pero mostrando un ritmo
desigual.
Así, entre 1850 y 1950, el PIB per cápita creció al 0, 7%,
duplicando su nivel inicial.
</p>
</div>
<?php
endif;
if (($opcion == 'deporte') || ($opcion == null)):
?>
<div id = "secciones">
<h2>Deporte</h2>
<p>
El español Rafael Nadal derrotó al canadiense Milos Raonic,
tercer favorito, por 6-4, 7-6 (7) y 6-4 en dos horas y 44 minutos,
para marcar su victoria 50 en el Abierto de Australia y alcanzar por
quinta vez las semifinales.
El campeón de 2009 y finalista en 2012 y 2014,
se enfrentará por un puesto para la final contra el búlgaro
Grigor Dimitrov, que derrotó antes al belga David Goffin,
por 6-3, 6-2 y 6-4, en dos horas y 13 minutos.
Será la 24 semifinal de Rafael Nadal en el Grand Slam,
</p>
</div>
<?php endif; ?>
</body>
</html>
|
Css para el ejercicio |
---|
#secciones{
border: 0.25em solid;
align : center;
left: 10%;
background-color: #eee;
font-size: 1.1em;
} |
|