Marcos de Desarrollo - UDC

19
Marcos de Desarrollo Diseño e implementación de aplicaciones Web con .NET

Transcript of Marcos de Desarrollo - UDC

Page 1: Marcos de Desarrollo - UDC

Marcos de DesarrolloDiseño e implementación de aplicaciones Web con .NET

Page 2: Marcos de Desarrollo - UDC

Objetivos

Conocer distintos mecanismos de gestión del estado en aplicaciones Web ASP.NET

Page 3: Marcos de Desarrollo - UDC

Gestión del Estado. Lado Cliente Parámetros incluidos en la URL (<a href="…">)

Query string:

e.g. http://www.google.com/search?q=asp.net Visibilidad elevada

Elementos de formularios ocultos (<input type="hidden") __VIEWSTATE

Cookies

Page 4: Marcos de Desarrollo - UDC

Gestión del Estado. Lado Cliente: ViewState ViewState almacena estado de los controles entre una

petición y la siguiente Todos los controles tienen la propiedad

EnableViewState (activado por defecto) Es posible añadir datos propios al ViewState:

ViewState se materializa como un campo oculto en el HTML de salida

ViewState["Contador"] = 1;

// sintaxis alternativa

ViewState.Add("Contador", 1);

Page 5: Marcos de Desarrollo - UDC

Gestión del Estado. Lado Cliente: Cookies Almacenan datos en el navegador del cliente

Limitaciones Tamaño máximo (4Kb)

Número total (~300)

Cookies por sitio web (~20)

Usuario puede bloquearlas

Page 6: Marcos de Desarrollo - UDC

Gestión del Estado. Lado Cliente: Cookies

Propiedades

Domain Servidor del que se descargó la cookie

Expires Fecha (objeto DateTime) en la que el navegador borrará la

cookie

Name Nombre de la cookie

Value Contenido de la cookie

Page 7: Marcos de Desarrollo - UDC

Gestión del Estado. Lado Cliente: Cookies Creación

HttpCookie cookie =

new HttpCookie("loginName", UserProfile.LoginName);

cookie.Expires = DateTime.Now.AddDays(30);

Response.Cookies.Add(cookie);

Lectura

HttpCookie cookie = Request.Cookies["loginName"];

Borrado

HttpCookie cookie = Request.Cookies["loginName"];

cookie.Expires = DateTime.Now.AddDays(-1);

Response.Cookies.Add(cookie);

Page 8: Marcos de Desarrollo - UDC

Gestión del Estado. Lado Cliente: Cookies

Ejemplo: Registro de la última visita

protected void Page_Load(object sender, EventArgs e)

{

String lastVisit;

if (Request.Cookies["lastVisit"] == null)

{

lblWelcome.Text = "Welcome. This is your first visit today";

}

else

{

lastVisit = Request.Cookies["lastVisit"];

lblWelcome.Text = "Your last visit was on " +

lastVisit.Value + ".";

}

DateTime time = DateTime.Now;

Response.Cookies["lastVisit"] = time.ToString();

Response.Cookies["lastVisit"].Expires = time.AddDays(1);

}

Page 9: Marcos de Desarrollo - UDC

Gestión del Estado. Lado Servidor Variables de Aplicación

Compartidas entre todas las sesiones y usuarios

Variables de Sesión

Accesibles sólo al propietario de la sesión

Requieren envío de SessionID

Page 10: Marcos de Desarrollo - UDC

Gestión del Estado. Lado ServidorVariables de Aplicación Estado aplicación se almacena en una instancia de la

clase HttpApplicationState

Accesible a través de la propiedad Page.Application Colección pares (clave, valor)

Los valores son de tipo Object

Usar principalmente en modo lectura

Inicialización a través del fichero Global.asax

Page 11: Marcos de Desarrollo - UDC

Gestión del Estado. Lado ServidorVariables de Aplicación

Ejemplo de lectura y escritura de objetos a nivel de aplicación

//Escritura

Application["Message"] = "Welcome to the this site.";

//Las variables de estado de aplicación pueden ser accedidas por

múltiples threads al mismo tiempo. Para prevenir datos inválidos,

se debe bloquear el acceso de escritura para que sólo pueda

acceder un thread

Application.Lock();

Application["PageRequestCount"] =

((int)Application["PageRequestCount"])+1;

Application.UnLock();

//Lectura

if (Application["AppStartTime"] != null)

{

DateTime myAppStartTime =

(DateTime)Application["AppStartTime"];

}

Page 12: Marcos de Desarrollo - UDC

Gestión del Estado. Lado ServidorVariables de Sesión ¿Qué es una sesión?

Contexto en el que un usuario se comunica con un servidor a través de múltiples peticiones HTTP

Problemas HTTP es no orientado a estado (stateless)

HTTP es no orientado a sesiones (sessionless)

Concepto de sesión manejado a nivel de programación

Estado aplicación se almacena en una instancia de la clase HttpSessionState

Accesible a través de la propiedad Page.Session Colección pares (clave, valor)

Los valores son de tipo Object

Page 13: Marcos de Desarrollo - UDC

Gestión del Estado. Lado ServidorVariables de Sesión

Ejemplo de lectura y escritura de objetos en la sesión

//Escritura

Session["firstName"] = "Pedro";

//Si se almacenan datos procedentes de un control de entrada, conviene usar

el método HtmlEncode

Session["firstName"] = Server.HtmlEncode(firstNameTextBox.Text);

//Sintaxis alternativa

Session.Add(itemName, itemValue)

//Lectura

string firstName = Session["firstName"].ToString();

//Alternativa

string firstName = (string)(Session["firstName"]);

//Conviene asegurarse de que el valor está en la sesión

if (Session["firstName"] == null)

{

...

Page 14: Marcos de Desarrollo - UDC

Gestión del Estado. Lado ServidorVariables de Sesión Identificador de sesión

Cadena ASCII de 120 bits Puede almacenarse en una cookie (no persistente) generada automáticamente

(ASP.NET_SessionID)

Opcionalmente puede gestionarse a través de la propia URL

No requiere cambios en el código aplicación

Links relativos siguen funcionando

Redirecciones mediante Response.ApplyAppPathModifier

Genera URLs del estilo:

http://server/site/(uqwfp455t2qav155)/default.aspx

Page 15: Marcos de Desarrollo - UDC

Gestión del Estado. Lado ServidorVariables de Sesión El comportamiento puede establecerse a nivel de aplicación

(Web.Config), con el atributo cookieless:

"True" o "UseUri": ASP.NET_SessionID incluído en la URL (UrlRewriting) ¡Opción recomendada para desarrollo!

"False" o "UseCookies": ASP.NET_SessionID incluído en una Cookie

"AutoDetect": las cookies se utilizarán si el navegador del cliente laspermite

<configuration>

<sessionState cookieless="UseUri" timeout="20"/>

</configuration>

Page 16: Marcos de Desarrollo - UDC

Gestión del Estado. Lado ServidorVariables de Sesión El estado de la sesión puede almacenarse:

In-process: en memoria, en el proceso de ASP.NET

Out-of-process: en un servidor de estado ASP.NET en una base de datos SQL Server fiabilidad y escalabilidad

Sobrevive a caídas proceso ASP.NET Estado compartido entre máquinas de una granja

Web.config:

<sessionState inproc="false" server="serverName" port="42424" />

Page 17: Marcos de Desarrollo - UDC

Gestión del Estado. Lado ServidorVariables de Sesión

Extraído de (MacDonald, 2010)

Page 18: Marcos de Desarrollo - UDC

Gestión del Estado. Lado ServidorVariables de Sesión Propiedades objeto Session

Count Número de pares (clave, valor) almacenados

Keys Conjunto de las claves almacenadas en la sesión

IsNewSession Indica si la sesión se ha creado durante la carga de la página actual

SessionID Identificador de sesión

Timeout Máximo número de minutos durante los que la sesión puede permanecer inactiva

antes de ser eliminada Tiempo por defecto: 20 minutos

Page 19: Marcos de Desarrollo - UDC

Bibliografía Recomendada:

M. MacDonald, A. Freeman, M. Szpuszta. Pro ASP.Net4 in C# 2010. 4th Ed. Apress. 2010.