Persistencia

El protocolo HTTP es de naturaleza CL, no persistente: el servidor recibe la petición, la procesa, devuelve el resultado y rompe el vínculo.

Para desarrollar aplicaciones web persistentes es necesario salvaguardar la información de usuario, su estado, entre sucesivos accesos .asp


1. Mecanismos

1. Paso de datos mediante QueryString

Una vez obtenidos los datos de un formulario con el método GET, pueden mantenerse entre sucesivas llamadas pasándolos como parámetros QueryString en cada una de ellas.

 

 

 

Ejemplo4.asp


<%@ LANGUAGE="VBSCRIPT" %>

<HTML>
<HEAD><TITLE>QueryString</TITLE>
</HEAD>
<body bgcolor="#CCFFFF">

<% Dim cnombre
 cnombre = Request.QueryString("Nombre")
 IF cnombre = "" THEN %>

  <h3>1. Tienes que identificarte...</h3>
  <FORM METHOD="GET" ACTION=Ejemplo4.asp>
  <p>Nombre: <input type="text" name="Nombre" size="33">
   DNI: <input type="text" name="DNI" size="19"><br>
   Dirección:<input type="text" name="Direccion" size="40"></p>
   <p><input type="submit" value="Enviar"></p>
   </form>

<% ELSE %>

<h3>¡Hola <%=cnombre%>!</h3>
<p><b>Elige una opción:</b></p>
<ul>
<li><a href="ejem41.asp?
<%=Request.QueryString%>">Consultar últimas noticias</a></li>
<li><a href="ejem42.asp?
<%=Request.QueryString%>">Revisar tu correo</a></li>
<li><a href="ejem43.asp?
<%=Request.QueryString%>">Ejecutar aplicación</a></li>
<li>...</li>
</ul>

<% END IF %>

</BODY>
</HTML>

 
Ejem41.asp


<%@ LANGUAGE="VBSCRIPT" %>
<% Response.Buffer = "True" %>

<HTML>
<HEAD><TITLE>NOTICIAS</TITLE>
</HEAD>
<body bgcolor="#CCFFFF">

<% Dim cnombre
   cnombre = Request.QueryString("Nombre")

IF cnombre = "" THEN
    Response.Redirect "Ejemplo4.asp"

ELSE %>

<h3>Usuario: <%=cnombre%></h3>
<p><b>Aquí puedes consultar las últimas noticias</b></p>
<table border="1" width="100%">
<tr><td width="33%">&nbsp;</td><td width="33%">&nbsp;</td>
<td width="34%">&nbsp;</td></tr>
</table>

<% END IF %>

</BODY>
</HTML>

 

Ejem42.asp


<%@ LANGUAGE="VBSCRIPT" %>
<% Response.Buffer = "True" %>

<HTML>
<HEAD><TITLE>NOTICIAS</TITLE>
</HEAD>
<body bgcolor="#CCFFFF">

<% Dim cnombre
     Dim cdirecc
     cnombre = Request.QueryString("Nombre")
     cdirecc = Request.QueryString("Direccion")

IF cnombre = "" THEN
     Response.Redirect "Ejemplo4.asp"

ELSE %>

<h3>Usuario: <%=cnombre%></h3>
<h4>E-mail :
<%=cdirecc%></h4>
<p><b>Aquí puedes revisar tu correo</b></p>
<table border="1" width="100%"><tr><td width="33%">&nbsp;</td><td width="33%">&nbsp;</td><td width="34%">&nbsp;</td></tr>
</table>

<% END IF %>

</BODY>
</HTML>

Ver ejemplo

 

2. Uso de Cookies

Los datos de interés para la aplicación pueden enviarse desde el servidor al navegador mediante cookies para su almacenamiento en disco. 

 

Se puede establecer un tiempo límite de vida para los cookies. Mientras están activos, el cliente reenvía los datos al servidor www en cada nuevo acceso.

Los objetos Response y Request gestionan el envío y la recuperación de los datos contenidos en el cookie.

    Ejemplo:


' Generación
  Response.Cookies("InformacionUsuario") ("UltimaVisita") = Now
  Response.Cookies("InformacionUsuario") ("Nombre") = cname
  Response.Cookies("InformacionUsuario").Expires = Date + 7

 'Recuperación
  cname = Request.Cookies("InformacionUsuario") ("Nombre") 

Limitaciones del mecanismo:

-         Los usuarios pueden configurar su navegador para no aceptar cookies

-         Los cookies no soportan estructuras de datos complejas: tan solo cadenas alfanuméricas, fechas y números

 

3. Uso del objeto Sesión

ASP proporciona el objeto Session para ayudar a los desarrolladores a mantener el estado de cada usuario activo. La gestión de la sesión la realiza el sistema de forma transparente: se inicia cuando el usuario accede por primera vez y se mantiene mientras se reproducen los accesos a cualquier página del proyecto:
   

 

El objeto Session puede almacenar cualquier clase de dato: números, cadenas, arrays, objetos... Esta información se elimina cuando vence un temporizador de inactividad del usuario (por defecto, 10 minutos sin accesos). Es por tanto un mecanismo de baja persistencia.  

¿Cómo funciona?

La primera vez que un usuario solicita un fichero .asp, el sistema genera un SessionID que le envía con una cookie. A partir de entonces, las sucesivas peticiones del usuario transportarán su SessionID. Por tanto, si el navegador no acepta cookies, no se puede ofrecer persistencia de sesión.

 

4. Uso del objeto Aplicación

El objeto Application permite mantener el estado de la aplicación, entendida como el conjunto de páginas asp que comparten un directorio virtual y todos sus subdirectorios. Las variables de aplicación estarán disponibles para todos los usuarios que convivan en el sistema (variables globales).  

No se gestionan por medio de cookies y pueden ser de alta persistencia

 

Resumen:

Querystring Hay que asegurarse de que cada hiperenlace pasa los parámetros querystring. Sólo opera con datos simples. No require que los cookies estén habilitados. Persistencia de sesión. Los datos están muy visibles.
Cookies Persistencia más allá de la sesión, pudiendo llegar a ser muy prolongada (semanas, meses...). Sólo permiten salvar datos simples. No sobrecarga el servidor ya que los datos se almacenan en el cliente.
Variables de sesión Adecuadas para persistencia de sesión. Pueden almacenar cualquier tipo de datos. Si se reciben muchos accesos concurrentes, pueden degradar las prestaciones del servidor.
Variables de aplicación Mantienen información global a todo el sitio web. Deben utilizarse técnicas de bloqueo. Alta persistencia y un modo de intercambiar información entre usuarios. No requiren cookies.


2. Ejemplo de Sesión

Aplicación con restricción de acceso a sus páginas en función de clave

  1. Identificación. Ejemplo5.asp


<%@ LANGUAGE="VBSCRIPT" %>

<% Response.Buffer = "True" %>

<% IF Request.Form = "" THEN %>
  
<HTML>
   <HEAD><TITLE>Ejemplo de Sesión</TITLE></HEAD>
   <BODY BGCOLOR="#CCFFFF">
   <CENTER>

   <FORM METHOD=Post ACTION=Ejemplo5.asp>
   <H4>IDENTIFIQUESE, POR FAVOR</H4>
   <TABLE BORDER=0>
   <TR><TD>USUARIO: <TD><INPUT NAME=Usuario SIZE=5>
   <TR><TD>CLAVE: <TD><INPUT TYPE=Password NAME=Clave SIZE=5>
   <TR><TD COLSPAN=2><INPUT TYPE=Submit VALUE=Enviar>
   </TABLE>
   </FORM>
   </BODY>
   </HTML>

<% ELSE
 

IF (Request.Form ("Usuario") = "Juan" AND Request.Form ("Clave") = "1111") OR (Request.Form ("Usuario") = "Pedro" AND Request.Form ("Clave") = "picapiedra") THEN

   Session ("Usuario") = Request.Form ("Usuario")
   Session ("Autentificado") = True
     Response.Redirect "Ejem51.asp"

ELSE
      Response.Redirect "Ejemplo5.asp"
END IF

END IF %>

  

2. Acceso a los servicios. Ejem51.asp


<%@ LANGUAGE="VBSCRIPT" %>

<% Response.Buffer = "True" %>

<% IF Session ("Autentificado") <> True 
   THEN Response.Redirect "Ejemplo5.asp" %>

<HTML>
<HEAD><TITLE>Acceso validado</TITLE></HEAD>
<BODY BGCOLOR="#CCFFFF">
<CENTER>
<H3>SE HA IDENTIFICADO CORRECTAMENTE</H3>
<H4>BIENVENIDO
<%= Session("Usuario") %></H4>
<P>
<a href="Ejem52.asp">Finalizar la sesión</a>
</BODY>
</HTML>

 

3. Fin de la sesión. Ejem52.asp


<%@ LANGUAGE="VBSCRIPT" %>

<HTML>
<HEAD><TITLE>Salida</TITLE></HEAD>
<BODY BGCOLOR="#CCFFFF">
<CENTER><H3>HASTA LUEGO</H3>

<%= Session.Abandon %>

</BODY>
</HTML>

Ver ejemplo

 

 

3. Global.ASA

 

El fichero opcional Global.asa (ASA: Active Server Application) se ubica en el directorio raíz de la aplicación, y nos permite declarar distintos eventos asociados con el comienzo y fin de sesión y aplicación, así como la inicialización de objetos, que podrán tener cualquiera de estos ámbitos.

Una aplicación se inicia cuando recibe una primera petición asp después del arranque del servidor. Una sesión lo hace cuando se produce la primera petición de un usuario o si ésta llega después de haber caducado su sesión anterior. 

Cada vez que el servidor recibe una petición de página .asp, y en función del SessionID, se procesa el fichero Global.asa para determinar si son de aplicación alguno de los eventos.

Los eventos Application_OnStart y Sesion_OnStart contienen código que se ejecuta cuando la aplicación o la sesión comienzan. Si ambas lo hacen al mismo tiempo, se procesa primero el evento Application_OnStart.

Ejemplo: Inicialización del componente AddRotation con ámbito de sesión


<SCRIPT LANGUAGE=VBScript RUNAT=Server>

Sub Session_OnStart
   Set Session(“MyAd”)=Server.CreateObjetc(“MSWC.Addrotator)
End Sub

</SCRIPT>

 

Análogamente, los eventos Application_OnEnd y Session_OnEnd permiten ejecutar código al final de una aplicación o sesión.

Una sesión finaliza cuando un usuario no realiza un nuevo requerimiento o refresco de página después de un intervalo de tiempo, 10 minutos por defecto, aunque puede variarse con la propiedad Timeout del objeto Session. También es posible forzar el fin de sesión con el método Abandon. La aplicación termina cuando se tira el servidor.



Anterior

Siguiente