[Indice]


El objeto Session

Cuando un usuario invoca por primera vez cualquiera de los ficheros de una aplicación, un objeto Session le es asignado automáticamente. Este objeto será utilizado por la aplicación para almacenar, compartir y recibir información del usuario. A diferencia del objeto Application, la información almacenada en Session solamente estará disponible para el usuario que lo tenga asignado. Por defecto, el objeto será destruido después de 20 minutos de inactividad, pero puede configurarse un tiempo diferente, y es buena idea reducirlo si el servidor tiene mucha carga, a fin de que libere los recursos asignados al usuario cuanto antes, pero calculando cuidadosamente el tiempo que el usuario puede necesitar para llevar a cabo sus transacciones. Si se acorta en exceso, el servidor puede cerrar la sesión antes que el usuario termine lo que esté haciendo.

Puede ocurrir que no sea necesario establecer sesion con los usuarios, por ejemplo, si el contenido de la página es estático o no precisa enviar cookies. Para evitar que ASP abra una sesion basta con escribir en la primera línea de la página lo siguiente: <%@ EnableSessionState=False%>

El objeto Session tiene 4 propiedades, 2 colecciones, 3 métodos y 2 eventos:


PROPIEDADES

Session.CodePage

Versión 3 o superior.

Esta propiedad especifica al servidor que página de código de caracteres debe utilizar para mostrar las páginas ASP invocadas desde el cliente. Por defecto, y si no se define otro valor para esta propiedad, el servidor utilizará la página predeterminada en el sistema. El cambio de página solamente estará activo el tiempo que dure la sesión. Esta propiedad puede ser muy útil para convertir textos escritos en una lengua diferente a la que utilizan los clientes. Por ejemplo, un texto escrito en español, con acentos (code 850), no utiliza la misma página de caracteres que un cliente de habla inglesa, que no tiene acentos (code 437).

Veamos cómo utilizarla:

<% '---Se guarda el código de página original
Session("CodOriginal") = Session.CodePage
 
'---El NuevoCod es recibido desde un formulario y Texto es el texto que se ha capturado en el mismo formulario
Nuevocod = Request.Form("NuevoCod")
Texto = Request.Form("Lo_que_hay_que_convertir")

'--- Se establece el nuevo código y la función FindTranslation() se encarga de buscar la conversión adecuada
Session.CodePage = NuevoCod
Conversion = FindTranslation(Texto, Nuevocod)

If Conversion <> "" Then
   Session.CodePage = Session("CodOriginal")
   Response.Write "La conversión de " & Texto & " es "
   Session.CodePage = NuevoCod
   Response.Write Conversion
End If
%>


Session.LCID

La propiedad LCID utiliza el número identificador de localización para dar en varios formatos, la fecha, hora y localizador específicos de un lugar o región. El número identificador de localización únicamente define una situación geográfica. Por ejemplo el identificador de España es el 2048, el de Francia es el 1036, etc.

<%
Response.Write "Este es el LCID para esta página " & Session.LCID & "<BR>"
Response.Write "Este es el formato fecha y hora para el LCID: " & NOW() & "<BR>"
Session.LCID = 1033
Response.Write "Este es el LCID para esta página " & Session.LCID & "<BR>"
Response.Write "Este es el formato fecha y hora para el LCID: " & NOW() & "<BR>"
Session.LCID = 3079
%>

Y este sería el resultado:

Este es el LCID para esta página 2048
Este es el formato fecha y hora para el LCID: 3/9/2001 14:56:07
Este es el LCID para esta página 1033
Este es el formato fecha y hora para el LCID: 9/3/01 2:56:07 PM


Session.SessionID

Proporciona un identificador de sesión para el usuario actual. Este identificador es generado por el servidor, y consiste en un número del tipo largo (long)

Se obtiene así:

<% Response.Write "Tu número de sesión es: " & Session.SessionID %>

Y este podría ser el resultado:

Tu número de sesión es: 465107831


Session.Timeout

Especifica el número de minutos que tienen que pasar, mientras la sesión está inactiva, para darla por terminada, siendo el valor por defecto de 20 minutos. Esto significa que si el usuario no refreesca la página, solicita otra o hace cualquier transacción la sesión es automáticamente cerrada y los recursos que tuviese asignados, recuperados. Este tiempo también es posible establecerlo de forma fija en las configuraciones de la aplicación en el propio IIS.

Por ejemplo, para establecer el Timeout en 35 minutos, se escribe:

<% Session.Timeout = 35 %>


COLECCIONES

Session.Contents()

Contiene (de ahí su nombre) una colección de todos los items que han sido creados y añadidos al objeto Session. Los items se pueden añadir a la lista mediante asignación directa de variables, o bien con el objeto Server y su método CreateObject.

Puede obtenerse una lista completa mediente un bucle del tipo For Each item in ... Next. Veamos como funciona:

<%
Session("Variable") = "Esto no es un objeto"
Set Session("Objeto") = Server.CreateObject("ADODB.Connection")
 
For Each Item in Session.Contents
    If IsObject(Session.Contents(Item)) Then
      Response.Write Item & " Esto es un objeto.<BR>"
    Else
      Response.Write Item & " = " & Session.Contents(Item) & "<BR>"
    End If
Next
%>

Y este sería el resultado:

Nombre del item     Contenido
-----------------------------------------
     Variable    =  Esto no es un objeto
     Objeto      =  Esto es un objeto.

Session.StaticObjects()

Esta es una colección de todos los items creados en el objeto Session utilizando un elemento HTML: <OBJECT>    En este caso, la asignación de valores a los items no se hace desde código ASP, sino en HTML y desde el fichero global.asa

Al igual que en la colección anterior, puede mostrarse su contenido mediante un bucle For Each item in ... Next.

---fichero global.asa
<OBJECT RUNAT=Server SCOPE=Session ID=MiConexion PROGID="ADODB.Connection">
</OBJECT>

---fichero.asp
<%
For Each Item In Session.StaticObjects
Response.Write Item & "<BR>"
Next
%>

Y este sería el resultado:
MiTexto
MiConexion


METODOS

Session.Abandon

Este método termina una sesión de usuario, destruye todos los objetos de la sesión y recupera los recursos asignados. Hay que tener en cuenta, que el fin de la sesión no ocurre efectivamente, hasta que no se han ejecutado todos los comandos que hay en la página actual. Cuando la sesión por fin termina, se dispara el evento del fichero global.asa OnEnd

Se escribe:

<%
Session.Abandon
%>


Session.Contents.Remove()

Versión 3 o superior.

Este método se utiliza para eliminar un item específico de la colección Session.Contents. El item que se desea eliminar puede referenciarse de dos maneras: por su nombre o por su número dentro de la colección, teniendo presente que la numeración comienza en el 1. Si se referencia por su nombre, éste deberá escribirse entre comillas dobles("). Por ejemplo:

<%
'---Se crean dos items
Session("Variable") = "Esto no es un objeto"
Set Session("Objeto") = Server.CreateObject("ADODB.Connection")

Session.Contents.Remove(1)
Session.Contents.Remove("Variable")

For Each Item in Session.Contents
    If IsObject(Session.Contents(Item)) Then
      Response.Write Item & " Esto es un objeto.<BR>"
    Else
      Response.Write Item & " = " & Session.Contents(Item) & "<BR>"
    End If
Next
%>

Y este sería el resultado, en el que el item Session("Variable") ha sido eliminado:

Nombre del item     Contenido
-----------------------------------------
     Objeto      =  Esto es un objeto.

Session.Contents.RemoveAll()

Versión 3 o superior.

Como su nombre indica, este método elimina TODOS los items de la colección Session.Contents().

En este caso no hay que referencia ningun nombre ni número.

<%
Session.Contents.RemoveAll( )
%>


EVENTOS

Session_OnStart     Session_OnEnd

Estos eventos se controlan en el fichero global.asa, y debe existir uno por cada aplicación que se ejecute en el servidor, cada uno en el directorio virtual donde ésta resida. El evento Session_OnStart ocurre justo antes de que el servidor haya creado el objeto Session.

'---Fichero global.asa
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Session_OnStart
End Sub

Sub Session_OnEnd
End Sub

Sub Application_OnStart
End Sub

Sub Application_OnEnd
End Sub

</SCRIPT>

Como puedes ver, contiene cuatro rutinas que sirven para detectar cuando está activa la aplicación y cuando un usuario abre o termina una sesión. El suceso (o evento, es lo mismo) Application_OnStart, sólo se disparará cuando el primer usuario solicite una página contenida en el directorio virtual de la aplicación, y a continuación se dispara Session_OnStart. Cuando otros usuarios soliciten otras páginas, o la misma, ya no se disparará el primer evento, sino sólo el Session_OnStart, que se activará tantas veces como usuarios haya conectados a la aplicación. Cuando un usuario cierra la aplicación voluntariamente, o bien transcurre un tiempo predefinido sin hacer ninguna transacción, se disparará Session_OnEnd, y cuando se haya desconectado el último usuario, lo hará Application_OnEnd.

Dentro de las rutinas que controlan los eventos del objeto Application, Application_OnStart y Application_OnEnd puede programarse cualquier acción que convenga realizar en ese momento. Por ejemplo, asignar valores fijos para toda la aplicación, declarar el texto de algunos mensajes en función de la fecha o la hora, etc., etc... o simplemente no hacer nada.


[Indice]