39 - Variables de sesión


Es un método para hacer que variables estén disponibles en múltiples páginas sin tener que pasarlas como parámetro. A diferencia de las cookies, las variables de sesión se almacenan en el servidor y tienen un tiempo limitado de existencia (por defecto 20 minutos)

Para identificar al usuario que generó las variables de sesión, el servidor genera una clave única que es enviada al navegador y almacenada en una cookie. Luego, cada vez que el navegador solicita otra página al mismo sitio, envía esta cookie (clave única) con la cual el servidor identifica de qué navegador proviene la petición y puede rescatar las variables de sesión que se han creado. Cuando han pasado 20 minutos sin peticiones por parte de un cliente (navegador) las variables de sesión son eliminadas automáticamente (se puede configurar para variar este tiempo)

Una variable de sesión es más segura que una cookie ya que se almacena en el servidor. Otra ventaja es que no tiene que estar enviándose continuamente como sucede con las cookies.

Como desventaja podemos decir que ocupa espacio en el servidor y el procesamiento de la página es más lento.

Haremos un problema muy sencillo, cargaremos en un formulario el nombre de usuario y clave de un cliente, en la segunda página crearemos dos variables de sesión y en una tercera página recuperaremos los valores almacenados en las variables de sesión.

pagina1.html

<html>
<head>
<title>Problema</title>
</head>
<body>
<form action="pagina1.asp" method="post">
Ingrese nombre de usuario:
<input type="text" name="usuario"><br>
Ingrese clave:
<input type="password" name="clave"><br>
<input type="submit" value="confirmar">
</form>
</body>
</html>

Ahora veamos la página donde se crean las dos variables de sesión.

pagina1.asp

<%option explicit%>
<html>
<head>
<title>problema</title>
</head>
<body>
<%
session.contents("usuario")=request.form("usuario")
session.contents("clave")=request.form("clave")
%>
<a href="pagina2.asp">Ir a la tercer página</a>
</body>
</html>

Para crear las variables de sesión el objeto session tiene una propiedad llamada contents, la cual le indicamos como parámetro el nombre de variable a crear:

session.contents("usuario")=request.form("usuario")
session.contents("clave")=request.form("clave")

Como vemos le asignamos a cada variable de sesión el valor extraido del formulario.

Por último la tercer página solo tiene por objetivo rescatar las variables de sesión e imprimir sus contenidos:

<%option explicit%>
<html>
<head>
<title>problema</title>
</head>
<body>
<%
response.write("Nombre de usuario cargado:" & session.contents("usuario") 
& <br>")
response.write("Clave cargada:" & session.contents("clave") 
& "<br>")
%>
</body>
</html>

Vemos que nuevamente accedemos mediante el objeto session a la propiedad contents:

response.write("Nombre de usuario cargado:" & session.contents("usuario") & <br>")

Un caso típico donde se emplean variables de sesión es cuando un sitio necesita que el visitante se registre e ingrese por medio de su nombre de usuario y clave. Todas las páginas que requieran que el visitante esté registrado procede antes de mostrar la página a ver si las variables de sesión existen, en caso negativo no muestra el contenido de dichas páginas.

Si queremos que las variables de sesión existan más de 20 minutos o menos, debemos inicializar la propiedad timeout del objeto session.

Imaginemos que desarrollamos una página que el usuario tiene hasta 30 minutos para completarla. Si el usuario creó una variable de sesión está se perderá, salvo que dispongamos en la página:

session.timeout=30

Por último si queremos cerrar una sesión debemos llamar al método abandom del objeto session:

session.abandom