PHP Interacción con el cliente



Documentos relacionados
Formularios HTML. Desarrollo de Aplicaciones Web Departamento Informática y Sistemas Universidad de Murcia Curso 2013/2014

A continuación se confeccionara un formulario para el ingreso de un nombre y un botón para el envío del dato ingresado al servidor:

Unidad Didáctica 2 GENERACIÓN DE DOCUMENTOS WEB CON GUIONES DE SERVIDOR

Formularios. La mayoría de los elementos de entrada son visuales y pueden interactuar con el usuario.

Los formularios irán delimitados por las etiquetas <FORM> y </FORM>, la cual tiene dos parámetros:

CapÍtulo 3: Manejo de Forms.

2- Formularios y JavaScript Course: Developing web- based applica=ons

Índice: Tema Aplicaciones basadas en Sesiones

Partes del formulario

Introducción al desarrollo web (idesweb)

HTML, PHP y bases de datos

Desarrollo de sitios web con PHP y MySQL

Este tipo de situaciones son solventadas a partir de las variables de sesión.

Índice: Tema Conexión con Bases de Datos

APRENDE A CREAR UNA PÁGINA WEB CON HTML

HTML 5 : Formularios

Formularios HTML. Elementos de Programación y Lógica

Bases de Datos. Marta Elena Zorrilla Pantaleón. Rafael Duque Medina DPTO. DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN

MANUAL DE FORMULARIOS EN HOSTING

2.5. Manipular objetos y formularios en una página Web.

FOROS. Manual de Usuario

GESTIÓN DOCUMENTAL PARA EL SISTEMA DE CALIDAD

PHP. Introducción (1) Introducción (3) Introducción (2) PHP 1

PHP: Interacción con HTML

Sesiones en PHP. Área de Ingeniería Telemática

MINI MANUAL PARA CREAR FORMULARIOS CON PHP Marzo 2007

PHP y MySQL. Indice: - Envia de datos de formulario - Método de envio - La variable de interprete - Envio de archivo - Propiedades

Escribiendo el HTML. Un formulario se declara entre estos dos tags:

Parte IIIb: Seguridad en APIs REST

Manual de configuración del correo electrónico Netkiamail en distintos dispositivos

Capítulo 3 Diseño del Sistema de Administración de Información de Bajo Costo para un Negocio Franquiciable

Diseño de páginas web

Manual de Usuario de la Herramienta SICRES-Tester. SIR Sistema de Interconexión de Registros. Tipo de documento. Fecha de entrega 08/04/2014

Programación de páginas web dinámicas con CGIs

Programación páginas web. Servidor (PHP)

PÁGINAS DINÁMICAS WEB CON PHP. Unidad 4 Aplicaciones Web

EXTENSIÓN DE UML PARA APLICACIONES WEB

Desarrollo y servicios web

TIPOS DE VARIABLES EN PHP. DECLARACIÓN Y ASIGNACIÓN. LA INSTRUCCIÓN ECHO PARA INSERTAR TEXTO O CÓDIGO. (CU00816B)

RESUMEN INFORMATIVO PROGRAMACIÓN DIDÁCTICA CURSO 2013/2014

Programa Control SMS para Teléfonos Android.

Manual Oficina Web de Clubes - Federaciones Autono micas y Delegaciones

Formularios en HTML 09/02/2015. Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos

Formularios en HTML. Grupo de Ingeniería del Software. Departamento de Lenguajes y Sistemas Informáticos. October 11

10. El entorno de publicación web (Publiweb)

GUÍA Nro. 1 TECNOLOGÍA DE INTERNET. TIII PIII

MANUAL ECOMMERCE 2.0

Ejemplo de aplicación PHP: Tienda

Los pasos a seguir para cumplimentar la solicitud son los siguientes: A continuación, se detallarán cada uno de estos apartados.

Tomar información por pantalla con JavaScript

PHPMYADMIN Y MYSQL. Para gestionar la base de datos MySQL, lo haremos desde la aplicación PhpMyAdmin.

Servicio de Notificaciones Electrónicas y Dirección Electrónica Habilitada

SERVICIO CREA TU WEB TELEFÓNICA NET. (Manual de usuario)

Sistema de Gestión Portuaria Sistema de Gestión Portuaria Uso General del Sistema

Activación de un Escritorio Remoto

CIF-KM. GUÍA DE LOS PRIMEROS PASOS

Programa diseñado y creado por Art-Tronic Promotora Audiovisual, S.L.

5. Composer: Publicar sus páginas en la web

TUTORIAL SOBRE EXPRESIONES REGULARES EN JAVASCRIPT PARA VALIDACIÓN DE CAMPOS EN FORMULARIOS HTML:

DISEÑO WEB ADOBE DREAMWEAVER CS3

Manual Oficina Web de Clubes (FBM)

MANUAL DE AYUDA TAREA PROGRAMADA COPIAS DE SEGURIDAD

Person IP CRM Manual MOBILE

LABORATORIO DE RC: PRÁCTICA 4: IMPLEMENTACIÓN DE UN CLIENTE DE CORREO

CONVERSOR LIBROS DE REGISTRO (IVA IGIC) Agencia Tributaria DEPARTAMENTO DE INFORMÁTICA TRIBUTARIA

Tema 4: Tecnologías Web Java

Manual PARA EL ADMINISTRADOR DE LA WEB DE PRÁCTICAS PRE PROFESIONALES Y PASANTÍAS

RECUPERAR DATOS DE UN FORMULARIO HTML USANDO PHP. USO DE $_GET. EJEMPLOS Y EJERCICIOS RESUELTOS. (CU00833B)

MANUAL DE USO DE LA APLICACIÓN

Guía de uso del Sistema de Gestión de Incidencias (RT) del Servicio de Informática

Tipos de Cookies utilizadas en este sitio web

Bases de Datos. Marta Elena Zorrilla Pantaleón Rafael Duque Medina DPTO. DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN

Tema 4: Diseño e Implementación de la Capa Web

MANUAL DE USUARIO DESKTOP

Introducción a PHP. * No es necesario declarar previamente las variables.

MANUAL DE USUARIO FACTURACIÓN ELECTRÓNICA

Plantilla de texto plano

Manual de usuario de Webmail

Tema 4. II - Cookies. Arquitecturas Distribuidas 11/12

Departamento de Lenguajes y Sistemas Informáticos. de formularios HTML

COMPROBACIONES BÁSICAS PARA EL USO DE FIRMA EN EL RTC

MANUAL DE AYUDA HERRAMIENTA DE APROVISIONAMIENTO

Abelardo Pardo. Iria Estévez Ayres. Damaris Fuentes Lorenzo. Pablo Basanta Val. Pedro J. Muñoz Merino. Hugo A. Parada.

MANUAL DE USUARIO DE CUENTAS DE CORREO

Diseño de formularios

Manual de configuración de cuentas correo Configuración de Alias de Correo

ÍTEMS DEL MENÚ CREACIÓN Y GESTIÓN (Última revisión: lunes, 9 de marzo de 2009)

Aplicateca. Manual de Usuario: Ilion Factura Electrónica. Espíritu de Servicio

Curso PHP Módulo 1 R-Luis

PROGRAMACIÓN PÁGINAS WEB CON PHP

SRM RELACIÓN CON LOS PROVEEDORES MANUAL DEL SUMINISTRADOR. Junio Versión 2

Ayuda básica relativa al interfaz web

MANUAL DE USO PROGRAMA DE GESTIÓN AGENCIAS DE VIAJES

Manual Instalación de certificados digitales en Outlook 2000

MANUAL DE AYUDA. SAT Móvil (Movilidad del Servicio Técnico)

Cómo crear, compartir y modificar un formulario

Correo Electrónico: Webmail: Horde 3.1.1

UF1304 Elaboración de plantillas y formularios

Transcripción:

PHP Interacción con el cliente Aplicaciones Web/Sistemas Web Juan Pavón Mestras Dep. Ingeniería del Software e Inteligencia Artificial Facultad de Informática Universidad Complutense Madrid Material bajo licencia Creative Commons PHP - Interacción con el cliente Formularios

Protocolo HTTP El navegador (cliente, user agent) solicita un recurso (página HTML, imagen, video, etc.) a un servidor Solicitud: método que se utiliza GET, POST, PUT, HEAD, etc. Campos de cabecera Línea en blanco Cuerpo del mensaje (texto): puede llevar parámetros del formulario El servidor responde enviando el recurso o con un mensaje de error Línea de estado: código del estado (OK, Error) y texto asociado Campos de cabecera Línea en blanco Cuerpo del mensaje: el recurso solicitado Cliente (Navegador) y conexión Servidor Juan Pavón - UCM 2012-13 PHP 3 1 solicitud (GET/POST,...) 2 respuesta cierre 3 80 x Paso de parámetros La petición del cliente puede llevar varios parámetros Normalmente se obtienen de un formulario Cómo se pasan depende de la acción indicada en el formulario HTML en el que se recogen los datos GET: petición de información (operación idempotente) GET consultatelefono.php?cliente=empresa1 Los parámetros se pasan como pares nombre=valor Se pueden pasar varios parámetros seguidos con & POST: peticiones que cambian el estado del servidor Guardar o actualizar datos Enviar email Ordenar datos POST modifica.php?cliente=empresa1&telefono=917892893 Juan Pavón - UCM 2012-13 PHP 4

Escenario típico de interacción (con GET) http://localhost/cursophp/hola.html hola.html <p>por favor, indique su nombre: <form method="get" action="procesaform.php"> Nombre: <input type="text" name="cliente" /> <input type="submit" value="enviar"> </form> </p> <?php $cliente=$_request["cliente"]; echo "Hola $cliente";?> procesaform.php Juan Pavón - UCM 2012-13 PHP 5 Escenario típico de interacción (con POST) http://localhost/cursophp/hola.html hola.html <p>por favor, indique su nombre: <form method="post" action="procesaform.php"> Nombre: <input type="text" name="cliente" /> <input type="submit" value="enviar"> </form> </p> <?php $cliente=$_request["cliente"]; echo "Hola $cliente";?> procesaform.php Juan Pavón - UCM 2012-13 PHP 6

Formularios <form> Conjunto de controles que permiten al usuario interactuar Generalmente para introducir datos y enviarlos al servidor web El navegador envía únicamente los datos de los controles contenidos en el formulario En una misma página puede haber varios formularios que envíen datos al mismo o a diferentes agentes <form action="http://www.miweb.com/procesaform.php" method="post"> Escribe tu nombre: <input type="text" name="nombre" value="" /> <br/> <input type="submit" value="enviar" /> </form> POST "/procesaform.php" nombre="valor" Juan Pavón - UCM 2012-13 PHP 7 Formularios Dentro de un formulario puede haber: Cualquier elemento típico de una página web Párrafos, imágenes, divisiones, listas, tablas, etc. Controles de formularios <input /> <button> <select> <optgroup> <option> <textarea> Estructura de formularios <fieldset> <legend> Información para accesibilidad <label> permite mejorar la accesibilidad de los controles Juan Pavón - UCM 2012-13 PHP 8

Formularios Atributos de <form> action="url": aplicación del servidor que procesará los datos remitidos (por ejemplo, un script de PHP) method: método HTTP para enviar los datos al servidor GET: como añadido a la dirección indicada en el atributo action Limitado a 500 bytes Los datos enviados se añaden al final de la URL de la página y por tanto se ven en la barra del navegador Se suele usar cuando se envía información que no modifica el servidor (por ejemplo, términos para una búsqueda) Si no se especifica, los navegadores suelen hacer GET POST: en forma separada Puede enviar más información Permite enviar ficheros adjuntos Los datos enviados no se ven en la barra del navegador Se suele usar cuando se envía información que puede modificar el servidor enctype: Tipo de codificación al enviar el formulario al servidor "application/x-www-form-urlencoded" o "multipart/form-data" Sólo se indica cuando se adjuntan archivos Juan Pavón - UCM 2012-13 PHP 9 Formularios <input /> type = "text password checkbox radio submit reset file hidden image button" - Indica el tipo de control que se incluye en el formulario name = "texto" - Nombre del control (para que el servidor pueda procesar el formulario) value = "texto" - Valor inicial del control size - Tamaño inicial del control (en píxeles, salvo para campos de texto y de password que se refiere al número de caracteres) maxlength = "numero" - Máximo tamaño de texto y de password checked = "checked" Opción preseleccionada para los controles checkbox y radiobutton disabled = "disabled" - El control aparece deshabilitado y su valor no se envía al servidor junto con el resto de datos readonly = "readonly" - El contenido del control no se puede modificar src = "url" - Para el control que permite crear botones con imágenes, indica la URL de la imagen que se emplea como botón de formulario alt = "texto" - Descripción del control Juan Pavón - UCM 2012-13 PHP 10

Formularios Cuadro de texto Nombre <br/> <input type="text" name="nombre" value="" /> Se enviará al servidor cuando se pulse un botón de enviar El nombre asignado en name tiene que concordar con el que se use en la aplicación en el servidor No se deben utilizar caracteres problemáticos en programación (espacios en blanco, acentos y caracteres como ñ o ç) value permite establecer un valor inicial en el cuadro de texto Contraseñas Contraseña <br/> <input type="password" name="contrasena" value="" /> Igual que el cuadro de texto por el valor introducido no se ve Juan Pavón - UCM 2012-13 PHP 11 Formularios Cuadro de texto de varias líneas Nombre <br/> <textarea name="nombre" rows="4" cols="50"> Contenido inicial del cuadro de texto </textarea> filas: número de filas visibles (sale una barra de desplazamiento si se hay más) columnas: anchura en caracteres Juan Pavón - UCM 2012-13 PHP 12

Formularios Botón de envío de formulario <input type="submit" name="enviar" value="enviar" /> El navegador se encarga de enviar automáticamente los datos cuando el usuario pincha el botón Botón de reseteo de formulario <input type="reset" name="borrar" value="borrar formulario" /> El navegador borra toda la información introducida y muestra el formulario en su estado original Juan Pavón - UCM 2012-13 PHP 13 Formularios Botones en general: <button> <button type="submit">enviar</button> <button type="reset">borrar formulario</button> <button type="button">botón</button> El navegador se encarga de enviar automáticamente los datos cuando el usuario pincha el botón Juan Pavón - UCM 2012-13 PHP 14

Formularios Casillas de verificación (checkbox) Lenguajes de programación: <br/> <input name="java" type="checkbox" value="on"/> Java <input name="cplusplus" type="checkbox" value="on"/> C++ <input name="csharp" type="checkbox" value="on"/> C# <input name="otros" type="checkbox" value="on"/> Otros value indica el tipo de casilla: on/off, yes/no, true/false Radiobutton Sexo <br/> <input type="radio" name="sexo" value="hombre" checked="checked" /> Hombre <input type="radio" name="sexo" value="mujer" /> Mujer Juan Pavón - UCM 2012-13 PHP 15 Ejercicio Crear una página PHP que genere un formulario con los siguientes campos: Un campo de texto para preguntar el nombre Un campo radio button para seleccionar el sexo Un campo checkbox para seleccionar lenguajes de programación Al hacer submit se envían los datos al servidor con POST y el servidor devuelve una página que devuelve un texto que muestra los datos recopilados. Para probar lo que se envía al servidor, usar las herramientas de desarrollador del navegador También se puede probar con GET y se verán los parámetros en la URL resultante al hacer submit Juan Pavón - UCM 2012-13 PHP 16

Formularios Listas de selección <form action=""> <select name="lenguajes"> <option value="c">c</option> <option value="cplusplus">c++</option> <option value="java" selected>java</option> <option value="php">php</option> <option value="python">python</option> </select> </form> Atributos de option: value determina el valor que se envía al servidor selected permite definir la opción por defecto Juan Pavón - UCM 2012-13 PHP 17 Formularios Agrupación de elementos Permite ver mejor las partes de un formulario agrupando elementos relacionados <legend> es el título que se visualiza con el grupo <form action=""> <fieldset> <legend>información personal:</legend> Nombre: <input type="text" size="50"><br> E mail: <input type="text" size="50"><br> Ciudad: <input type="text" size="20"> </fieldset> </form> Juan Pavón - UCM 2012-13 PHP 18

Información recibida con la solicitud del cliente El valor de los parámetros se guarda en $_REQUEST $_REQUEST ["nombre-parámetro"] nombre-parámetro es el que en el formulario se indica con el atributo name <p>nombre: <input type="text" name="nombre" /></p> Si se quiere depurar se puede ver toda la información recibida con print_r($_request); Se pueden usar igualmente las siguientes variables superglobales $_GET ["nombre-parámetro"] $_POST ["nombre-parámetro"] Pero $_REQUEST vale para ambos tipos de solicitudes Juan Pavón - UCM 2012-13 PHP 19 Ficheros en formularios Incluir un fichero El atributo enctype en la etiqueta <form> del formulario tiene que ser multipart/form-data <form name="fichero" action="procesa_fichero.php" method="post" enctype="multipart/form-data"> Fichero: <input type="file" name="archivo" /> <input type="submit" value="enviar"> </form> Los ficheros recibidos se pueden acceder con $_FILE[] $_FILE['campoFile']['name'] Nombre del fichero en el cliente $_FILE['campoFile']['type'] Tipo MIME del fichero $_FILE['campoFile']['size'] Tamaño, en bytes, del fichero Juan Pavón - UCM 2012-13 PHP 20

Validación de la información recibida Los campos de texto de los formularios siempre se reciben Conviene comprobar que no estén vacíos Las casillas de verificación y los botones radio solamente están definidos en $_REQUEST si se han marcado en el formulario Conviene comprobar que están definidos SIEMPRE hay que validar los datos recibidos Texto correcto No vacío (strlen() > 0) Eliminar caracteres en blanco (trim()) Cuidado con caracteres especiales Números Bien formados Enteros: intval() Reales: floatval() Rango de valores Dirección de correo electrónico Preg_match('/^[^@\s]+@([a z0 9]+\.)+[a z]{2,}$/i', $_POST['email']) Juan Pavón - UCM 2012-13 PHP 21 Seguridad en las entradas Conviene comprobar que no llegue código con < y > Podría ocasionar efectos inesperados Juan Pavón - UCM 2012-13 PHP 22

Seguridad en las entradas Para evitarlo se usa una función que elimine < y > strip_tags(string) Retira las etiquetas HTML y PHP de un string htmlspecialchars(string) Convierte caracteres especiales en entidades HTML & & " (comillas dobles) " ' (comilla simple) &#039; < '<' > '>' También conviene quitar los espacios al principio trim(string) Elimina los espacios en blanco iniciales y finales del string En resumen, se debería hacer algo así: $cliente=htmlspecialchars(trim(strip_tags($_request["cliente"]))); Juan Pavón - UCM 2012-13 PHP 23 Codificación de caracteres especiales Carácter Código / %2F : %3A = %3D " %22 ' %60 (espacio) %20? %3F @ %40 & %26 \ %5C ~ %7E %7C (también como +) Juan Pavón - UCM 2012-13 PHP 24

Funciones útiles para tratar strings substr(string, posición, [longitud]) Devuelve una subcadena de caracteres, a partir de la posición idicada y de longitud la especificada (o hasta el final si no se especifica) strpos(string1, string2, [posición]) Buscan en string1 la primera aparición de string2 Si se especifica, se empieza a buscar a partir de la posición indicada htmlspecialchars(string) Reemplaza en el string aquellos caracteres que no son válidos en HTML y los convierte en sus equivalentes válidos (con &) & & " " < < > > nl2br(string) Cambia los saltos de línea '\n' por <br> Juan Pavón - UCM 2012-13 PHP 25 Ejercicio Crear una página con un formulario que recoja información de un nuevo cliente, la valide y la almacene en la base de datos tienda como nuevo registro de la tabla clientes Si todos los datos son correctos y se almacena bien en la base de datos se mostrará una página indicando que la operación se ha realizado con éxito, mostrando los campos del registro que se han guardado Si hubiera campos con datos incorrectos, volver a mostrar el formulario resaltando dichos campos. Los datos que fueran correctos aparecerán en sus respectivos campos para que el usuario no tenga que volver a introducirlos Juan Pavón - UCM 2012-13 PHP 26

PHP - Interacción con el cliente Cookies Cookies HTTP es un protocolo SIN ESTADO No se guarda información de la sesión/historia pasada (Esto simplifica el protocolo) Uso de cookies Un cookie es un string que se pasa en una cabecera HTTP y que el navegador puede guardar en un pequeño fichero de texto En archivos temporales del navegador correspondiente El cookie se reenvía luego al servidor HTTP con cada petición del cliente a ese servidor Los cookies no pueden capturar información del cliente Sólo recuerdan información proporcionada por el usuario al servidor (es el servidor quien los crea) Usos Guardar las preferencias del usuario Reconocimiento de usuarios El cookie puede guardar un identificador que permite al servidor acceder a todos los datos almacenados en su base de datos Gestión de sesiones Juan Pavón - UCM 2012-13 PHP 28

Cookies Atributos Par (Nombre, Valor) Comentario (se puede presentar al usuario) P.ej. para explicar para qué se usa el cookie (política del sitio web) Especificación de las páginas y dominios a los que se puede enviar el cookie Fecha y hora de expiración Permite controlar por ejemplo el tiempo máximo de una sesión antes de volver a pedir login Requiere o no una página segura Versión Tamaño máximo: 4Kbytes (Normalmente ocupan alrededor de 100 bytes) Seguridad Los cookies sólo pueden ir al dominio especificado No conviene poner información sensible en el cookie, mejor utilizar un identificador en el cookie que sirva de clave de acceso en la base de datos del servidor Juan Pavón - UCM 2012-13 PHP 29 Cookies Funcionamiento del mecanismo de cookies crea cookie respuesta HTTP navegador servidor petición HTTP Memoria/ Disco Juan Pavón - UCM 2012-13 PHP 30

Programación de cookies con PHP Creación y envío de un cookie: setcookie() El cookie se envía en la cabecera del mensaje de respuesta HTTP El método se tiene que llamar antes de que la página PHP genere cualquier resultado (antes de cualquier sentencia echo o print) El navegador recordará el nombre y valor del cookie y lo enviará al servidor en peticiones posteriores Los cookies recibidos con la solicitud del cliente se pueden consultar en $_COOKIE[] <?php $cookie1="nombre"; $valor1="juan"; $expira1=time()+3600*24; // expira en 24 horas setcookie($cookie1, $valor1, $expira1);?> <html> <head><title>hola Cookie</title></head> <body> <?php echo "<h1>hola $_COOKIE[$cookie1]</h1>";?> </body> </html> Juan Pavón - UCM 2012-13 PHP 31 Programación de cookies con PHP setcookie($nombre, $valor, $tvida, $ruta, $dominio, $seguridad) Las cookies tienen un $nombre y un $valor El nombre no debe coincidir con el de un control de formulario porque en $_REQUEST se guardaría solo el valor del cookie, no el del control Se puede indicar un tiempo de vida del cookie Si no se indica, el cookie se elimina al cerrar el navegador El tiempo se indica como tiempo Unix, esto es, el número de segundos desde el 1 de Enero de 1970 La función time() devuelve el número de segundos que han pasado desde esa fecha Se indicará como $tvida=time()+$numerosegundos; $ruta y $dominio determinan páginas y dominios a los que se puede enviar el cookie $seguridad indica si se mandará el cookie únicamente en conexiones seguras https (TRUE) o indistintamente (FALSE) $cookie1="nombre"; $valor1="juan"; $tvida=time()+3600*24; // expira en 24 horas setcookie($cookie1, $valor1, $tvida, ".dominio.com"); Juan Pavón - UCM 2012-13 PHP 32

Programación de cookies con PHP Modificación del valor de un cookie Basta con crear nuevamente el cookie con otro valor Borrado de un cookie Se consigue creando el cookie con un tiempo de expiración del pasado setcookie("nombre", "valor", time() 60); Uso de un cookie Consultando su existencia en la superglobal $_COOKIE Conviene comprobar antes que se haya recibido if (isset($_cookie["nombre"])) { echo "<p>el valor del cookie nombre es $_COOKIE[nombre]</p>"; } else { echo "<p>no se ha recibido el cookie nombre.</p>"; } Juan Pavón - UCM 2012-13 PHP 33 Ejercicios Cookies Crea una página PHP que solicite al usuario un nombre y el número de segundos de vida para el cookie asociado al nombre. Comprueba su funcionamiento Desarrolla una página PHP que recuerde el color de fondo preferido por un cliente Desarrolla una página PHP que compruebe si el navegador permite crear cookies y devuelva un mensaje indicando si los admite o no Soluciones a ejercicios similares: http://www.mclibre.org/consultar/php/ejercicios/cookies/cookies.html Juan Pavón - UCM 2012-13 PHP 34

PHP - Interacción con el cliente Sesiones Sesiones de usuario Una sesión determina un contexto que relaciona las acciones del cliente sobre un sitio web Normalmente las variables son destruidas cuando acaba la ejecución de una página PHP A veces es necesario guardar cierta información entre una página y otra durante la navegación de un cliente Las sesiones tienen un ciclo de vida Inicio de sesión Login de usuario Actividad del usuario Flujo lógico de operaciones de consulta/modificación de información Cierre de sesión Explícito por el usuario Por expiración de un tiempo de inactividad Juan Pavón - UCM 2012-13 PHP 36

Mecanismos para implementar sesiones Para gestionar las sesiones sobre HTTP (protocolo sin estado) se podrían usar varios mecanismos Un cookie: PHPSESSID Cuando se inicia una sesión en una página, el intérprete PHP comprueba la presencia de este cookie y la establece si no existe El identificador de sesión en la cookie PHPSESSID permite identificar unívocamente ese cliente en el servidor Variables de identificación de sesión Normalmente el usuario navega de una página a otra del mismo sitio Se podría crear un identificador único al visitar la primera página si no existiera y pasarlo en las siguientes páginas Como un argumento en cada GET <a href="siguiente.php?sesion=<?php echo $_GET['id_sesion'];?>">Siguiente página</a> En formularios, como un argumento oculto en el POST <form action=siguiente.php method=post> Campos del formulario <input type=hidden name=sesion value="<?php echo $_GET['id_sesion'];?>" > </form> Juan Pavón - UCM 2012-13 PHP 37 Sesiones en PHP PHP ofrece un mecanismo de gestión de sesiones que abstrae al programador de cuál de esos mecanismos se utilice Normalmente usa cookies si el navegador lo permite, y si no el identificador de sesión en GET y POST Las variables de la sesión se guardan en un fichero en el servidor con el nombre del identificador Gestión de sesiones en PHP 1. Iniciar una nueva sesión: session_start(); Se tiene que invocar antes de escribir cualquier cosa con echo o print Porque el identificador de la sesión se envía en la cabecera de respuesta HTTP 2. Uso de la variable superglobal $_SESSION Todas las variables de la sesión se incluirán y se pueden acceder, entre página y página de una misma sesión, en el array $_SESSION Siempre se tiene que haber invocado antes session_start() al principio de la página (así PHP prepara las variables correspondientes a la sesión) 3. Cerrar sesión: session_destroy(); Juan Pavón - UCM 2012-13 PHP 38

Ejemplo de sesión PHP <?php session_start();?> <html> <head><title>ejemplo de sesiones PHP</title></head> <body> <h1>ejemplo de sesiones con PHP</h1> <?php if (!isset($_session['contador'])) { echo "<p>bienvenido por primera vez</p>"; $_SESSION['contador']=1; } else { $_SESSION['contador']++; echo "<p>ya nos has visitado ". $_SESSION['contador']." veces.</p>"; }?> </body> </html> Juan Pavón - UCM 2012-13 PHP 39 Ejercicio Sesiones Probar a crear dos páginas distintas para una misma sesión En la primera crear la sesión <?php session_start(); $_SESSION["nombre"] = "Juan"; print "<p>se ha guardado tu nombre.</p>";?> En la segunda usar alguna variable de la sesión creada <?php session_start(); print "<p>hola $_SESSION[nombre], vemos que sigues por aquí</p>";?> Juan Pavón - UCM 2012-13 PHP 40

Sesiones Una sesión se puede destruir con la función session_destroy() Pero las variables correspondientes pueden seguir usándose en esa ejecución del script Los datos de una sesión en $_SESSION se guardan durante un tiempo predeterminado de 24 minutos La directiva de configuración session.gc_maxlifetime permite configurar este valor por defecto ini_set(string varconfig, valor) permite modificar ese valor Tiene que invocarse antes de session_start() Los valores de $_SESSION se pueden borrar también como en cualquier otra matriz mediante la función unset() Juan Pavón - UCM 2012-13 PHP 41 Otras funciones para gestión de sesiones session_register("variable") Registra la variable en la sesión Se debe especificar el nombre de la variable sin $ Las asignaciones a esa variable se mantendrán en futuras invocaciones dentro de la sesión Si no se hubiera invocado session_start(), esta función lo hace session_unregister("variable") Elimina la variable en la sesión session_is_registered("variable") Comprueba si la variable está registrada en la sesión session_id() Devuelve el identificador de la sesión Juan Pavón - UCM 2012-13 PHP 42

Ejercicios Sesiones Prueba a contar el número de accesos de un cliente a una página durante una sesión. La página tendrá un botón para iniciar la sesión y otro para cerrarla. También visualizará en cada momento el número de accesos que se han producido a la página durante la sesión Es bastante similar al ejemplo anterior Crea una secuencia de páginas que soliciten información sobre un usuario. En la primera página su nombre, en la segunda su número de teléfono y en la tercera su email. En la cuarta se mostrarán los datos recibidos Prueba a acceder a la vez desde dos navegadores distintos para comprobar que se pueden gestionar dos sesiones diferentes a la vez Solución a un problema similar en: http://www.mclibre.org/consultar/php/ejercicios/nivel_medio/sesiones/sesiones.html Juan Pavón - UCM 2012-13 PHP 43 Ejercicio: Autenticación de usuarios Crear un sistema de autenticación de usuarios que guarde los passwords codificados en una base de datos Habrá que cifrar el password Se recomienda usar https Qué información habrá que guardar en la base de datos? Ejemplo: http://www.mclibre.org/consultar/php/ejercicios/nivel_medio/registro_usuarios.html Con LDAP: http://docstore.mik.ua/orelly/webprog/pcook/ch17_09.htm http://www.ajpdsoft.com/modules.php?name=news&file=article&sid=494 Juan Pavón - UCM 2012-13 PHP 44