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:
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
'--- Se establece el nuevo código y la función FindTranslation() se encarga de buscar la conversión adecuada
If Conversion <> "" Then
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")
Session.CodePage = NuevoCod
Conversion = FindTranslation(Texto, Nuevocod)
Session.CodePage = Session("CodOriginal")
Response.Write "La conversión de " & Texto & " es "
Session.CodePage = NuevoCod
Response.Write Conversion
End If
%>
<%
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
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
Por ejemplo, para establecer el Timeout en 35 minutos, se escribe:
<% Session.Timeout = 35 %>
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.
Al igual que en la colección anterior, puede mostrarse su contenido mediante un bucle For Each item in ... Next.
---fichero global.asa
---fichero.asp
<OBJECT RUNAT=Server SCOPE=Session ID=MiConexion PROGID="ADODB.Connection">
</OBJECT>
<%
For Each Item In Session.StaticObjects
Response.Write Item & "<BR>"
Next
%>
MiTexto
MiConexion
Se escribe:
<%
Session.Abandon
%>
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:
<%
Session.Contents.Remove(1)
For Each Item in Session.Contents
'---Se crean dos items
Session("Variable") = "Esto no es un objeto"
Set Session("Objeto") = Server.CreateObject("ADODB.Connection")
Session.Contents.Remove("Variable")
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.
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( )
%>
'---Fichero global.asa
Sub Session_OnEnd
Sub Application_OnStart
Sub Application_OnEnd
</SCRIPT>
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Session_OnStart
End Sub
End Sub
End Sub
End Sub
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.