Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porFelipe Guttierrez Modificado hace 9 años
1
Práctica 4 Estado de la sesión. Más sobre Eventos Universidad de Oviedo Comercio Electrónico
2
Comercio Electrónico (EUITIO) 2 IntroducciónIntroducción Veremos los objetos RequestResponseCookies Aprenderemos a mantener el estado de la sesión del usuario entre distintas peticiones de páginas Session
3
Comercio Electrónico (EUITIO) 3 El objeto Response Permite enviar datos al cliente Normalmente, en las páginas en ASP tradicional, enviábamos contenido HTML al navegador a través de este objeto En ASP.NET sigue siendo posible hacerlo asíResponse.Write(string.Format( “La hora es: {0} ”, “La hora es: {0} ”, DateTime.Now.ToShortTimeString())); DateTime.Now.ToShortTimeString())); Pero no es lo habitual controles del lado del servidor –Lo normal es trabajar con controles del lado del servidor Y generar el contenido dinámico en el código de la página, accediendo a las propiedades de dichos controles
4
Comercio Electrónico (EUITIO) 4 Redirigir a otra página Éste sí sigue siendo otro uso habitual en ASP.NET El objeto Response permite redirigir a otra página distinta En función de la lógica de la aplicación –Por ejemplo, para mostrar un error personalizado, para mostrar los detalles de un artículo seleccionado, para ver la cesta de la compra… Response.Redirect(“Bienvenido.aspx”); Response.Redirect(“Bienvenido.aspx”);
5
Comercio Electrónico (EUITIO) 5 CookiesCookies Permiten mantener la sesión del usuario guardando datos en el cliente Aunque no son lo bastante robustas como para guardar objetos complejos (conexiones a BD, objetos de negocio…) sí se pueden usar para guardar la información necesaria para luego crear esos objetos en el servidor Por ejemplo, mediante un identificador de usuario con el que luego recuperemos toda su información asociada mediante consultas a la base de datos
6
Comercio Electrónico (EUITIO) 6 Crear y enviar una ‘cookie’ HttpCookie cookie = new HttpCookie(“MiAplicacion”); cookie.Values.Add(“IDUsuario”, “1250”); Response.Cookies.Add(cookie); Crearía una ‘cookie’ de sesión Si quisiéramos una persistente: HttpCookie cookie = new HttpCookie(“MiAplicacion”); cookie.Expires = Convert.ToDateTime(“12/01/05 16:00”); cookie.Values.Add(“IDUsuario”, “1250”); Response.Cookies.Add(cookie);
7
Comercio Electrónico (EUITIO) 7 Leer el valor de una ‘cookie’ HttpCookie cookie = Request.Cookies[“MiAplicacion”]; if (cookie == null) // no se encontró la cookie // no se encontró la cookieelse{ string s = cookie.Values[“IDUsuario”].ToString(); string s = cookie.Values[“IDUsuario”].ToString(); if (s.Trim().Length == 0) if (s.Trim().Length == 0) // se encontró la cookie, pero está vacía // se encontró la cookie, pero está vacía else else // se encontró la cookie y tenía un valor // se encontró la cookie y tenía un valor}
8
Comercio Electrónico (EUITIO) 8 Colecciones QueryString y Form Permiten recoger los parámetros enviados a una página.aspx mediante GET y POST, respectivamente Al igual que en ASP tradicional, o los Servlet/JSP, o CGI… Son miembros de la clase HttpRequest Request Accesibles a través del objeto predefinido Request No obstante, en ASP.NET no hay necesidad de leer las variables del formulario a través de estas colecciones Dado que estos valores están presentes en el código de la página como variables miembros (controles de ASP.NET) Lo normal es acceder a estos valores a través de los eventos generados –De hecho, en ASP.NET lo normal es que el formulario de la página se envíe a la misma página, no a otra distinta
9
Variables de sesión Veamos ahora otra forma de mantener la sesión sin usar ‘cookies’, por medio de la variable Session que provee ASP.NET y que almacena objetos en memoria en el servidor mientras dura la sesión.
10
Comercio Electrónico (EUITIO) 10 Variables de sesión Permiten almacenar datos que persisten entre sucesivas peticiones de páginas Similar a las variables globales en una aplicación tradicional ASP.NET provee el objeto predefinido Session ¿Cómo funciona internamente? ID de sesión Cuando ASP.NET recibe la primera petición de página de un usuario, genera un ID de sesión único mediante un complejo algoritmo y lo guarda en una cookie en el navegador del cliente Session Para las siguientes peticiones, busca dicha cookie, recupera el ID de la sesión y lo usa para acceder al objeto Session de ese usuario –En ese objeto podemos guardar objetos y recuperar esa información en cualquier momento mientras dure la sesión
11
Comercio Electrónico (EUITIO) 11 Sección sessionState en el fichero Web.Config En ese fichero puede configurarse el modo en que guarda ASP.NET la sesión del usuario Por ejemplo, podríamos decirle que no usase cookies –Si no, estamos obligando a que nuestros usuarios las tengan activadas (al menos las de sesión) En principio, no necesitamos tocar nada ahí Está dentro de la sección sessionState
12
Comercio Electrónico (EUITIO) 12 Guardar datos en sesión Podemos hacerlo de una cualquiera de estas dos formas (hacen exactamente lo mismo): Session[“IDUsuario”] = CampoUsuario.Text; o: Session.Add(“IDUsuario”, CampoUsuario.Text); Podemos guardar un objeto de cualquier tipo object Es decir, un object
13
Comercio Electrónico (EUITIO) 13 Recuperar una variable de sesión Basta con hacer lo siguiente: string s = (string) Session[“IDUsuario”];
14
Comercio Electrónico (EUITIO) 14 Ejercicio con variables de sesión Crear una página que permita introducir un nombre en un campo de texto y que tenga un botón “Ir” Como la que se muestra a continuación
15
Comercio Electrónico (EUITIO) 15 Ejercicio: primera página
16
Comercio Electrónico (EUITIO) 16 ¿Qué pasa al pulsar el botón? Se deberá llamar a otra página (recuérdese el Response.Redirect ) tras haber guardado previamente en el objeto Session el nombre introducido por el usuario ¿Dónde hacemos eso? Click En el evento Click del botón ( ).aspx Basta con pulsar sobre el botón dos veces, en la vista de diseño de la página.aspx, y Visual Studio.NET creará el método para manejar el evento por nosotros Esa otra página simplemente recuperará el valor del nombre almacenado y lo mostrará
17
Comercio Electrónico (EUITIO) 17 Resultado de pulsar el botón
18
Comercio Electrónico (EUITIO) 18 Algunas consideraciones El objeto Session, en una aplicación Web empresarial, no debería usarse para guardar grandes cantidades de datos En vez de eso, es mejor guardar sólo la información mínima necesaria para reconstruir esos objetos Por ejemplo, guardando una clave primaria que luego nos permita recuperar la información de la base de datos
19
Comercio Electrónico (EUITIO) 19 Otros métodos de Session También tiene métodos para borrar variables de la sesión: RemoveRemoveAtRemoveAllClear O para abandonar la sesión actual: Abandon
20
Más sobre eventos Aunque en la primera práctica sobre ASP.NET ya trabajamos con eventos, veremos ahora alguna cosa un poco más compleja: cómo diferenciar entre distintos generadores de un mismo evento.
21
Comercio Electrónico (EUITIO) 21 Averiguar quién generó el evento Supongamos que queremos una lista de productos con un botón ( Button, LinkButton, ImageButton ) para mostrar los detalles de ese producto, o para añadirlo a la cesta de la compra… Si esos botones fuesen estáticos (añadidos en tiempo de diseño), no tendríamos ningún problema: Click –Programaríamos el evento Click de cada uno de ellos Pero, ¿qué pasa si son creados dinámicamente? –Es necesario distinguirlos (saber cuál se pulsó)
22
Comercio Electrónico (EUITIO) 22 CommandName y CommandArgument Son dos propiedades que tienen los distintos tipos de botones string La primera es de tipo string object La segunda puede albergar cualquier tipo de objeto ( object )
23
Comercio Electrónico (EUITIO) 23 Evento Command Además del evento Click, los botones tienen un evento Command, que también se lanza cuando son pulsados CommandEventArgsEventArgs La diferencia es que éste recibe un parámetro de tipo CommandEventArgs, en vez de EventArgs CommandNameCommandArgument A través de dicho parámetro podemos acceder a las propiedades CommandName y CommandArgument del botón que generó el evento private void BotonPulsado(object sender, System.Web.UI.WebControls.CommandEventArgs e) {... e.CommandName... e.CommandArgument }
24
Comercio Electrónico (EUITIO) 24 Ejemplo: DosBotones.aspx Como prueba vamos a hacer una página que conste de dos botones, a los cuales vamos a asociarles el mismo evento Command La página deberá mostrar qué botón se pulsó Click Esto es sólo para probar lo anterior, pero realmente éste es uno de esos casos en los que nos bastaría con tener un par de eventos Click, uno para cada botón, y programar cada uno de esos métodos manejadores como quisiéramos
25
Comercio Electrónico (EUITIO) 25 EjercicioEjercicio Ahora vamos a ver un ejemplo más real, en el que los botones se generan dinámicamente Sea una base de datos de artículos Por ejemplo, libros que tengan un código, un título, y un precio Mediante un control Repeater, obtener un listado de los títulos de todos los libros y añadir algún tipo de botón al lado de cada título para “añadir el libro a la cesta de la compra” Label Realmente, lo que hará, por ahora, será simplemente mostrar el código del libro correspondiente en un control Label de la página En este caso, se generará el evento Item_Command del control Repeater Púlsese dos veces sobre el control en la vista de diseño de la página.aspx y Visual Studio generará el método apropiado para responder a dicho evento
26
Comercio Electrónico (EUITIO) 26 Listado de los libros
27
Comercio Electrónico (EUITIO) 27 Al pulsar en uno…
28
Juntándolo todo…
29
Comercio Electrónico (EUITIO) 29 EjercicioEjercicio Haciendo uso de lo que vimos hasta ahora, crear un pequeño sistema de registro de usuarios Constará de: Base de datos de usuario –ID de usuario, Contraseña, Nombre, Apellidos Pantalla inicial –Pedirá el nombre de usuario y la contraseña –Al pulsar el botón se comprobará si existe un usuario con esa contraseña Si es así, se mostrará la pantalla de bienvenida Guardando en sesión el ID de usuario Si no, un pequeño mensaje de error en la misma página Pantalla de bienvenida –Accederá a la BD con el ID de usuario para mostrar su nombre
30
Comercio Electrónico (EUITIO) 30 Página inicial
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.