Documente Academic
Documente Profesional
Documente Cultură
Índice
Descripción 1
Lección: administración del estado 2
Lección: variables de aplicación y de sesión 17
Lección: cookies y sesiones que no utilizan cookies 29
Administración del estado 1
Descripción
***
***
Introducción La conexión que se establece entre un usuario (el equipo cliente) y un servidor
Web se denomina sesión. Las sesiones pueden abarcar múltiples páginas Web y
su seguimiento se realiza mediante la administración del estado.
La administración del estado es el proceso por el cual mantenemos la misma
información a través de múltiples peticiones para las mismas o distintas páginas
Web.
En esta lección, empezaremos a conocer en detalle qué es la administración del
estado y por qué es importante administrar el estado. Estudiaremos la
administración del estado en el lado del servidor y la administración del estado
en el lado del cliente. También estudiaremos el archivo global.asax.
Objetivos de la lección En esta lección, aprenderemos a:
Describir la administración del estado.
Identificar los distintos tipos de opciones de administración del estado.
Describir la administración del estado en el lado del servidor.
Describir la administración del estado en el lado del cliente.
Describir los distintos eventos que controla el archivo global.asax.
Administración del estado 3
¡¡He
¡¡Heolvidado
olvidado
quién
quiéneres!!
eres!!
***
Introducción Al igual que las tecnologías basadas en Hypertext Transfer Protocol (HTTP),
los formularios Web Forms no tienen estado, lo que significa que no indican
automáticamente si las peticiones de una secuencia son todas del mismo cliente
ni si una única instancia de navegador sigue visualizando de forma activa una
página Web o un sitio Web. Además, las páginas Web se destruyen y vuelven a
crearse a continuación con cada nueva petición al servidor Web; por tanto, la
información de las páginas no existe más allá del ciclo de vida de una única
página.
Administración del ASP.NET ofrece una administración del estado que guarda información en el
estado servidor entre páginas, que ayuda a mantener la continuidad de la información
del usuario (estado) durante una visita a un sitio Web.
Si se mantiene el estado entre páginas, la información suministrada
originalmente por los usuarios puede ser reutilizada; por ello, los usuarios no
necesitan volver a introducir la misma información varias veces cada vez que se
envía una página de retorno al servidor.
Ejemplo Por ejemplo, en la ilustración anterior, el usuario, John Chen, introduce su
nombre en el formulario login.aspx. Después de introducir sus datos personales,
esa información se envía al servidor y se muestra la página siguiente, el
formulario greetings.aspx. Sin administración del estado, la información que el
usuario ha introducido en la primera página se ha perdido.
Sin embargo, si se utiliza administración del estado en la aplicación Web, puede
mantenerse el estado a través de varias páginas Web. Por tanto, cuando la
información personal del usuario se envía al servidor, la segunda página, el
formulario greetings.aspx, da la bienvenida al usuario con su nombre, John
4 Administración del estado
Administració
Administración del estado en Administració
Administración del estado en
el lado del servidor el lado del cliente
Estado de la aplicación Cookies
La información está disponible Archivo de texto que almacena
para todos los usuarios de una información para mantener el
aplicación Web estado
***
Introducción ASP.NET proporciona dos tipos de administración del estado que pueden
utilizarse para mantener el estado entre envíos y respuestas al servidor. La
elección de uno de los dos tipos de administración del estado disponibles en
ASP.NET depende principalmente de la naturaleza de la aplicación Web.
Administración del Los dos tipos de administración del estado son:
estado en el lado del
cliente y en el lado del Lado servidor
servidor Las opciones de la administración del estado en el lado del servidor utilizan
recursos del servidor para almacenar la información del estado. La
seguridad de estas opciones es mayor que en el lado del cliente.
Lado cliente
La administración del estado en el lado del cliente no utiliza recursos del
servidor para almacenar la información del estado. Las opciones en el lado
del cliente tienden a tener seguridad mínima, pero ofrecen un rápido
rendimiento del servidor porque no existe demanda en el servidor para
mantener el estado.
Lado servidor La administración del estado en el lado del servidor contiene diferentes
opciones a escoger, incluyendo:
Estado de aplicación
En el estado de aplicación, la información está disponible para todos los
usuarios de una aplicación Web; por ejemplo, almacenar el número de
visitantes a una aplicación Web.
Estado de sesión
6 Administración del estado
Lado cliente La administración del estado en el lado del cliente también ofrece distintas
opciones para mantener el estado. Estas opciones incluyen:
Cookies
Una cookie es un archivo de texto que puede utilizarse para almacenar
pequeñas cantidades de información necesarias para mantener el estado.
La propiedad ViewState
Los formularios Web Forms proporcionan la propiedad ViewState como
una estructura incluida para conservar automáticamente valores entre
múltiples peticiones a la misma página. La propiedad ViewState se
mantiene como un campo oculto en la página.
Cadenas de consulta
Una cadena de consulta es información que se añade al final de una URL
(Uniform Resource Locator). Un ejemplo típico podría ser el siguiente:
http://www.contoso.com/listwidgets.aspx?category=basic&price=100
En la ruta URL anterior, la cadena de consulta se inicia con un signo de
interrogación (?) e incluye dos pares atributo-valor, categoría y precio.
***
Introducción ASP.NET ofrece varias opciones para administrar el estado en el lado del
servidor. Los estados de aplicación y de sesión son dos de estas opciones. Esta
sección trata de los estados de aplicación y de sesión en mayor detalle.
Estado de aplicación ASP.NET proporciona el estado de aplicación utilizando una instancia de la
clase HttpApplicationState para cada aplicación Web activa. El estado de
aplicación es un mecanismo de almacenamiento global al que se puede acceder
desde todas las páginas de la aplicación Web, y por tanto es útil para almacenar
información del usuario que debe preservarse entre transferencias al servidor y
viajes entre páginas.
El estado de la aplicación es una estructura de diccionario clave-valor que se
crea en cada petición a una URL específica. Podemos agregar la información
específica de la aplicación a esta estructura para almacenarla entre peticiones de
páginas. Después de agregar la información específica de aplicación al estado
de la aplicación, el servidor la gestiona.
Variables de aplicación ASP.NET proporciona las variables de aplicación que mantienen el estado de
aplicación. Los datos ideales para insertar en variables de aplicación son los
datos compartidos por múltiples sesiones y que no cambian a menudo.
Estado de sesión ASP.NET proporciona estado de sesión utilizando una instancia de la clase
HttpSessionState para cada sesión de aplicación Web activa.
El estado de sesión es similar al estado de aplicación, salvo en que está limitado
a la sesión actual del navegador. Si distintos usuarios están utilizando una
aplicación Web, cada usuario tendrá un estado de sesión distinto. Además, si el
mismo usuario abandona la aplicación Web y regresa más tarde, ese usuario
también tendrá un estado de sesión distinto al que tenía antes.
Administración del estado 9
Cookies
***
Vencimiento Las cookies pueden expirar cuando finaliza la sesión del explorador (cookies
temporales), o pueden existir indefinidamente en el equipo cliente, dependiendo
de las reglas de expiración del cliente (cookies persistentes).
Los usuarios también pueden decidir eliminar cookies de su equipo antes de que
éstas expiren. Por tanto, no existe garantía de que una cookie persistente
permanecerá en el equipo de un usuario durante el periodo de tiempo
especificado.
Seguridad Las cookies son menos seguras si las comparamos con las opciones de
administración del estado en el lado del servidor. Las cookies también están
sujetas a la manipulación. Lo usuarios pueden manipular cookies en su equipo,
lo que puede representar potencialmente un compromiso de seguridad o puede
hacer que la aplicación que depende de la cookie pueda fallar.
Información limitada También existe un límite sobre cuánta información puede almacenarse en una
cookie ya que los equipos cliente tienen restricciones en el tamaño de los
archivos. Además, cada cookie individual puede contener una cantidad limitada
de información, no más de 4 kilobytes (KB).
Administración del estado 13
El archivo Global.asax
***
Cliente
Petición
Petición Respuesta
Respuesta
ASP.NET
ASP.NET HTTP
HTTPRuntime
Runtime
Application_BeginRequest
Application_BeginRequest
Application_AuthenticateRequest
Application_AuthenticateRequest
Application_AuthorizeRequest
Application_AuthorizeRequest Application_EndRequest
Application_EndRequest
Application_ResolveRequestCache
Application_ResolveRequestCache Application_UpdateRequestCache
Application_UpdateRequestCache
Application_AquireRequestState
Application_AquireRequestState Application_ReleaseRequestState
Application_ReleaseRequestState
Application_PreRequestHandlerExecute
Application_PreRequestHandlerExecute Application_PostRequestHandlerExecute
Application_PostRequestHandlerExecute
Ejecución
Ejecución de
de la
la página
página
***
Eventos invocados La siguiente tabla lista los eventos que se invocan cuando se solicita una
cuando se solicita una página.
página
Nombre del evento Descripción
Eventos invocados Global.asax también incluye eventos invocados cuando la página solicitada se
cuando se envía la envía de vuelta al cliente. La siguiente tabla lista estos eventos.
página solicitada
Nombre del evento Descripción
Eventos de aplicación Los eventos de aplicación condicionales son eventos que pueden o no ser
condicionales lanzados durante le procesamiento de una petición. La siguiente tabla muestra
algunos de los eventos de aplicación condicionales más habituales.
Nombre del evento Descripción
***
protected
protected void
void Application_Start(Object
Application_Start(Object sender,EventArgs
sender,EventArgs e)
e)
{{
Application["NumberofVisitors"]
Application["NumberofVisitors"] == 0;
0;
}}
***
Variables de aplicación Podemos utilizar el objeto Application para compartir información de estado
entre todos los usuarios de una aplicación Web. Cuando el primer usuario de la
aplicación Web solicita un archivo .aspx, se crea un objeto Application. El
objeto Application se destruye cuando todos los usuarios han abandonado la
aplicación Web y, a continuación, se descarga la aplicación Web.
Por ejemplo, podríamos almacenar el número total de visitantes de un sitio Web
en una variable de nivel de aplicación:
Visual Basic .NET Sub Application_Start(ByVal Sender As Object, _
ByVal e As EventArgs)
Application("NumberofVisitors") = 0
End Sub
Session["BackColor"]
Session["BackColor"] == "blue";
"blue";
Application.Lock();
Application.Lock();
Application["NumberOfVisitors"]
Application["NumberOfVisitors"] ==
(int)Application["NumberOfVisitors"]
(int)Application["NumberOfVisitors"] ++ 1;
1;
Application.UnLock();
Application.UnLock();
Leer variables de aplicación y de sesión
strBgColor
strBgColor == Session("BackColor")
Session("BackColor")
lblNbVisitor.Text
lblNbVisitor.Text == Application("NumberOfVisitors")
Application("NumberOfVisitors")
strBgColor
strBgColor == (string)Session["BackColor"];
(string)Session["BackColor"];
lblNbVisitor.Text
lblNbVisitor.Text == Application["NumberOfVisitors"].ToString();
Application["NumberOfVisitors"].ToString();
***
C# Application.Lock();
Application["NumberofVisitors"] =
(int)Application["NumberOfVisitors"] + 1;
Application.UnLock();
Administración del estado 21
Leer variables de Para utilizar una variable de sesión o de aplicación en una página ASP.NET,
aplicación y de sesión simplemente necesitamos leer el valor del objeto Session o Application:
Visual Basic.NET strBgColor = Session("BackColor")
lblNbVisitor.Text = Application("NumberOfVisitors")
C# strBgColor = (string)Session["BackColor"];
lblNbVistitor.Text =
Application["NumberofVisitors"].ToString();
22 Administración del estado
***
Ë Ejecutar la demostración
1. Abrir el proyecto Demo12VB o Demo12CS.
2. Abrir la página de código subyacente de global.asax.
3. Inicializar una variable de sesión, denominada intNumber a 3, agregando el
siguiente código al procedimiento de evento Session_Start:
Visual Basic .NET Session("intNumber") = 3
C# Session["intNumber"] = 3;
***
Introducción HTTP es un protocolo sin estado. Un servidor Web no tiene medios para
detectar cuando un usuario abandona un sitio Web. En cambio, el servidor
Web detecta que ha transcurrido un determinado periodo de tiempo sin que el
usuario solicite una página. En ese momento, el servidor Web asume que el
usuario ha abandonado el sitio Web y elimina todos los elementos del estado de
sesión asociados a ese usuario.
Duración De forma predeterminada, el tiempo de una sesión finaliza cuando un usuario
predeterminada de la no ha solicitado ninguna página durante más de 20 minutos. Si el mismo
sesión usuario solicita una página transcurridos 20 minutos, será tratado como un
nuevo usuario.
Nota Establecer duraciones de sesión más cortas permite al sitio Web ahorrar
recursos en el servidor Web. En cambio, si nuestra previsión es que el usuario
pase más de 20 minutos en nuestro sitio Web, deberíamos establecer una
duración de sesión más larga.
Variable de aplicación Las variables de aplicación persisten hasta que se invoca el evento
Application_End. Application_End se invoca inmediatamente antes del final
de todas las instancias de la aplicación.
Administración del estado 25
-O-
SQL
Cliente
***
1
1 Configurar el estado de sesión en Web.config
z Modo establecido a sqlserver o stateserver
<sessionState
<sessionState mode="SQLServer"
mode="SQLServer"
sqlConnectionString="data
sqlConnectionString="data source=SQLServerName;
source=SQLServerName;
Integrated
Integrated security=true"
security=true" />
/>
2
2 A continuación, configurar el servidor SQL Server
c:\>
c:\> OSQL
OSQL –S
–S SQLServerName
SQLServerName –E
–E <InstallSqlState.sql
<InstallSqlState.sql
***
Introducción Para almacenar variables de aplicación y de sesión en una base de datos SQL
Server o en un servidor de estado, debemos seguir los siguientes pasos:
1. Configurar el estado de sesión en el archivo Web.config del servidor Web.
2. Configurar el servidor SQL Server o el servidor de estado.
Configurar el servidor Para configurar el servidor SQL Server, debemos utilizar la herramienta desde
SQL Server línea de comandos que proporciona SQL Server, OSQL.exe.
OSQL.exe instala la base de datos denominada ASPState, que se utiliza para
guardar las variables de aplicación y de sesión.
Para instalar la base de datos ASPState utilizado seguridad integrada, utilizar la
siguiente sintaxis:
28 Administración del estado
***
Introducción Las cookies son un medio por el cual la aplicación Web que se ejecuta en el
servidor Web puede hacer que un cliente devuelva información al servidor Web
con cada solicitud HTTP. La devolución de información puede utilizarse para
mantener el estado con el cliente entre múltiples peticiones. Las cookies se
envían al cliente como parte del encabezado HTTP en una solicitud del cliente,
o se envían en una respuesta del servidor.
En esta lección, estudiaremos cómo utilizar cookies para almacenar datos de
sesión, y cómo recuperar esos datos de una cookie. También estudiaremos las
sesiones que no utilizan cookies y cómo se establecen.
Objetivos de la lección En esta lección, aprenderemos a:
Utilizar cookies para almacenar datos de sesión.
Recuperar información de una cookie.
Describir sesiones que no utilizan cookies.
Establecer una sesión que no utiliza cookies.
30 Administración del estado
***
Introducción Podemos crear cookies utilizando la propiedad Cookies del objeto Response y
la clase Request. La propiedad Cookies representa una colección de cookies y
es una instancia de la clase HttpCookieCollection.
Crear una cookie El siguiente código crea una nueva cookie denominada myCookie:
Visual Basic .NET Dim objCookie As New HttpCookie("myCookie")
Dim now As DateTime = DateTime.Now
C# objCookie.Values.Add("Time", now.ToString());
objCookie.Values.Add("ForeColor", "White");
objCookie.Values.Add("BackColor", "Blue");
Hacer una cookie El siguiente código establece en una hora el tiempo de expiración de la cookie:
persistente
C#
Administración del estado 31
objCookie.Expires = now.AddHours(1);
32 Administración del estado
Si no agregamos el código anterior cuando creamos una cookie, ésta será una
cookie temporal. La cookie temporal se añade a la memoria del navegador, pero
no se almacenará en un archivo. Cuando el usuario cierra el explorador, la
cookie se elimina de la memoria.
Agregar el código sobre el tiempo de expiración convierte la cookie temporal
en una cookie persistente. La cookie persistente se guarda en el disco duro. Con
una cookie persistente, si el usuario cierra el explorador y lo abre de nuevo,
puede acceder a la misma página Web otra vez hasta que la cookie persistente
expire. La expiración de la cookie persistente depende del tiempo de expiración
establecido en el código. En el código anterior, la cookie persistente se
eliminará transcurrida una hora.
C# Response.Cookies.Add(objCookie);
Cómo funcionan las Supongamos que deseamos crear una cookie, denominada Username, que
cookies contiene el nombre de un visitante a nuestro sitio Web. Para crear esta cookie,
el servidor Web enviará un encabezado HTTP como muestra el siguiente
código:
Set-Cookie: Username=John+Chen; path=/; domain=microsoft.com;
Expires=Tuesday, 01-Feb-05 00.00.01 GMT
Las cookies que se almacenan en formato de archivo de texto son las cookies
persistentes. De forma predeterminada, este archivo se almacena en la carpeta
\Documents and Settings\NombreUsuario\Cookies.
Cuando las cookies persistentes se almacenan utilizando Internet Explorer, el
formato del archivo de texto es:
NombreUsuario@NombreDominio.txt
Administración del estado 33
Los estudiantes:
z Aprenderán a utilizar las variables de
aplicación y de sesión, y las cookies
persistentes, para almacenar información
del usuario
Tiempo: 15 Minutos
***
_____________________________________________________________
_____________________________________________________________
Ë Visualizar el código
1. En el cuadro de dirección de Windows Explorer, escribir:
\\máquinaprofesor\c$\inetpub\wwwroot\mod14VB o
\\máquinaprofesor\c$\inetpub\wwwroot\mod14CS
Y pulsar ENTER.
2. Abrir la página de código subyacente de la página Default.aspx.
¿Qué dos acciones se producen en el procedimiento de evento
btnSubmit_Click?
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
Ë Visualizar la cookie
1. En Windows Explorer, ir al siguiente directorio del equipo:
c:\Documents and Settings\Student\Cookies
<<Note>>
____________________________________________________________
Leer la cookie
Dim
Dim objCookie
objCookie As
As HttpCookie
HttpCookie == Request.Cookies("myCookie")
Request.Cookies("myCookie")
HttpCookie
HttpCookie objCookie
objCookie == Request.Cookies["myCookie"];
Request.Cookies["myCookie"];
lblTime.Text
lblTime.Text == objCookie.Values["Time"];
objCookie.Values["Time"];
lblTime.ForeColor
lblTime.ForeColor == System.Drawing.Color.FromName
System.Drawing.Color.FromName
(objCookie.Values["ForeColor"]);
(objCookie.Values["ForeColor"]);
lblTime.BackColor
lblTime.BackColor == System.Drawing.Color.FromName
System.Drawing.Color.FromName
(objCookie.Values["BackColor"]);
(objCookie.Values["BackColor"]);
***
Introducción Recuperar información de una cookie implica leer una cookie y recuperar los
pares clave/valor de la misma.
Leer una cookie El cliente devuelve al servidor una cookie en un encabezado HTTP "Cookie:".
En este encabezado pueden aparecer múltiples cookies, separadas por punto y
coma. Para leer una cookie existente, podemos acceder a la colección de
cookies del objeto Request, como muestra el siguiente código:
Visual Basic Dim objCookie As HttpCookie = Request.Cookies("myCookie")
Recuperar valores de la El siguiente código muestra los valores que deben recuperarse de una cookie:
cookie
C# lblTime.Text = objCookie.Values["Time"];
lblTime.ForeColor = System.Drawing.Color.FromName
(objCookie.Values["ForeColor"]);
lblTime.BackColor = System.Drawing.Color.FromName
(objCookie.Values["BackColor"]);
Administración del estado 37
***
Limitación de las Existen algunas limitaciones en el uso sesiones que no utilizan cookies:
sesiones que no utilizan
cookies Si decidimos utilizar sesiones que no utilizan cookies, no podemos utilizar
URLs absolutas para los enlaces entre páginas. El sitio Web debe diseñarse
de forma que cada enlace utilice una URL relativa a la página actual.
La mayoría de navegadores limitan el tamaño de la URL a 255 caracteres.
Administración del estado 39
<sessionState
<sessionState cookieless="true"
cookieless="true" />
/>
***
Introducción Para habilitar sesiones que no utilizan cookies, es necesario modificar un único
atributo del archivo Web.config.
Configurar una sesión En la sección <sessionstate> del archivo Web.config, el atributo cookieless
que no utiliza cookies está establecido al valor true. Para habilitar sesiones que no utilizan cookies, lo
único que debemos hacer es establecer este valor, como muestra el siguiente
código:
<sessionState cookieless="true" />