Diferencia entre revisiones de «Usuario:ManuelRomero/ProgramacionWeb/php/Aut Ses Coo/ejercicios»
De WikiEducator
(→Cuenta de visitas) |
|||
Línea 61: | Línea 61: | ||
*coméntalas con tus palabras en dicho fichero}} | *coméntalas con tus palabras en dicho fichero}} | ||
====Cuenta de visitas==== | ====Cuenta de visitas==== | ||
+ | <br /> | ||
{{Actividad|Title)=Cuenta visitas| | {{Actividad|Title)=Cuenta visitas| | ||
;Haz un programa que te cuente cuantas visitas recibe la página | ;Haz un programa que te cuente cuantas visitas recibe la página | ||
Línea 67: | Línea 68: | ||
<? session_start(); | <? session_start(); | ||
if (!isset($_SESSION["cuenta_paginas"])){ | if (!isset($_SESSION["cuenta_paginas"])){ | ||
− | $_SESSION[" | + | $_SESSION["visitas"] = 1; |
}else{ | }else{ | ||
− | $_SESSION[" | + | $_SESSION["visitas"]++; |
} | } | ||
?> | ?> | ||
Línea 87: | Línea 88: | ||
</html> | </html> | ||
</source> | </source> | ||
+ | }} | ||
+ | {{MRM_Actividad|Title= Almacena las fechas de cada visita| | ||
+ | Modifica el programa anterior para almacenar el momento en el cual se produjo cada visita | ||
+ | |||
+ | <source lang=php> | ||
+ | <?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(); | ||
+ | ?> | ||
+ | </source> | ||
+ | }} | ||
+ | |||
+ | |||
+ | {{MRM_Actividad|Title= Control de acceso con autentificacion| | ||
+ | *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 | ||
+ | <source lang=php> | ||
+ | <?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> | ||
+ | </source> | ||
+ | }} | ||
+ | |||
+ | {{MRM_Actividad|Title=Más ejercicios para practicar| | ||
+ | Ejercicios: | ||
+ | * http://www.mclibre.org/consultar/php/ejercicios/nivel_medio/sesiones/sesiones.html | ||
+ | ** Formulario en tres pasos | ||
+ | ** Almacenamiento de datos en sesión | ||
+ | * http://www.mclibre.org/consultar/php/ejercicios/nivel_medio/registro_de_usuarios_1.html | ||
+ | |||
}} | }} |
Revisión de 01:57 23 dic 2016
Autentificación
Ficheros de usuarios
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
<?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
Crea un sencillo sitio web que me redirija a 4 páginas:
Tip: Ten en cuenta los propietarios de la carpeta (el grupo que pertenezca a www-data
|
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
Cuenta de visitas
<? session_start(); if (!isset($_SESSION["cuenta_paginas"])){ $_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["cuenta_paginas"] . " páginas"; ?> <br> <br> <a href="otracuenta.php">Ver otra página</a> </body> </html>
|
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(); ?>
|
<?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>
|
Ejercicios:
|