Gestión del Estado

Anuncio
Marcos de Desarrollo
Diseño e implementación de aplicaciones Web con .NET
Objetivos
 Conocer distintos mecanismos de gestión del estado
en aplicaciones Web ASP.NET
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
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["Contador"] = 1;
// sintaxis alternativa
ViewState.Add("Contador", 1);
 ViewState se materializa como un campo oculto en el
HTML de salida
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
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
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);
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);
}
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
Gestión del Estado. Lado Servidor
Variables 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
Gestión del Estado. Lado Servidor
Variables 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"];
}
Gestión del Estado. Lado Servidor
Variables 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
Gestión del Estado. Lado Servidor
Variables 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)
{
...
Gestión del Estado. Lado Servidor
Variables 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
Gestión del Estado. Lado Servidor
Variables 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 las
permite
<configuration>
<sessionState cookieless="UseUri" timeout="20"/>
</configuration>
Gestión del Estado. Lado Servidor
Variables 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" />
Gestión del Estado. Lado Servidor
Variables de Sesión
Extraído de (MacDonald, 2010)
Gestión del Estado. Lado Servidor
Variables 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
Bibliografía
 Recomendada:
 M. MacDonald, A. Freeman, M. Szpuszta. Pro ASP.Net
4 in C# 2010. 4th Ed. Apress. 2010.
Descargar