Que es una sesion

Una sesión es una serie de comunicaciones entre un cliente y un servidor en la que se realiza un intercambio de información. Por medio de una sesión se puede hacer un seguimiento de un usuario a través de la aplicación. El tiempo de vida de una sesión comienza cuando un usuario se conecta por primera vez a un sitio web pero su finalización puede estar relacionada con tres circunstancias: -Cuando se abandona el sitio web. -Cuando se alcanza un tiempo de inactividad que es previamente establecido, en este caso la sesión es automáticamente eliminada. Si el usuario siguiera navegando se crearía una nueva sesión. -Se ha cerrado o reiniciado el servidor.

Después de haber hecho esto el usuario tendrá una serie de permisos sobre las páginas que va a visitar, de tal forma que si un usuario intenta pasar a una página si haberse identificado, el sistema comprobará que no se ha identificado y sería redireccionado a la página de identificación. Para poder realizarse estas operaciones es necesario almacenar en unas tipo sesión la información necesaria para saber que el usuario se ha identificado correctamente

volver

Manejo de Sesiones

•En JSP las acciones que se pueden realizar sobre las sesiones se lleva a cabo mediante la interface HttpSession y los métodos que implementa. Esta interfaz está incluida dentro del paquete javax.servlet.http y es utilizada por el contenedor de páginas JSP para crear una sesión entre el servidor y el cliente.

<%HttpSession sesion=request.getSession();%> Es posible conocer el momento en el que se creó la sesión:

<%@page import=”java.util.*” session=”true”%> <% HttpSession sesion=request.getSession(); out.println(“Creación: “+sesion.getCreationTime()); Date momento=new Date(sesion.getCreationTime()); out.println(“Creación: “+momento); %>

Teniendo en cuenta el momento en el que ser creó la sesión y la última vez que se accedió al servidor, se puede conocer el tiempo que lleva el cliente conectado al servidor, o lo que es lo mismo el tiempo que lleva el usuario navegando por la páginas JSP:

<% long longDuracion=sesion.getLastAccessedTime(); sesion.getCreationTime();

Date duracion=new Date(longDuracion);
out.println(“Duracion:“+duracion.getMinutes()+”min.”+duracion.getSeconds()+”seg”); %>

La interfaz HttpSession ofrece el método isNew() mediante el cual es posible saber si la sesión creada es nueva o se está tomando de una previamente creada:

<% HttpSession sesion=request.getSession(); out.println(“nueva: “+sesion.isNew()); %>

volver

Guardar objetos

•Para guardar un objeto en una sesión se utiliza el método setAttribute(), que ha sustituido al método putValue(). Este método utiliza dos argumentos: -El primero es el nombre que identificará a esa variable. -El segundo es el dato que se va a guardar. SetAttribute(java.lang.String name, java.lang.Object value) Un ejemplo de cómo guardar una cadena de texto en la sesión:

<%@page import=”java.util.*” session=”true” %> <% HttpSession sesion=request.getSession(); sesion.setAttribute(“trabajo”,”Paginas de JSP”); %>

Si se hubiera utilizado el valor entero en vez del objeto Integer, el resultado habría sido similar al siguiente. Incompatible type for meted. Can’t convert int to java.lang.Object. En el primer ejemplo este no sucedería puesto que una cadena es un objeto de tipo String, no así un entero. Así habría sido igual si en el primer caso ponemos:

<%@page import=”java.util.*” session=”true” %>

&% HttpSession sesion=request.getSession(); String nombre=new String(“Paginas de JSP·); sesion.setAttribute(“trabajo”,nombre); %>

En caso de tratarse objeto de tipo Vector (parecido a un array con dos diferencias: la primera es que puede almacenar todo tipo de objetos, y la segunda es que no es necesario establecer de forma previa el tamaño que va a tener) que almacene los 7 días de la semana. El código sería el siguiente:

<%@page import=”java.util.*” session=”true” %>

<% HttpSession sesion=request.getSession();

Vector v=new Vector();

v.addElement(new String(“Lunes”));

v.addElement(new String(“Martes”));

v.addElement(new String(“Miercoles”));

v.addElement(new String(“Jueves”));

v.addElement(new String(“Viernes”));

v.addElement(new String(“Sábado”));

v.addElement(new String(“Domingo”));

sesion.setAttribute(“diasSemana”,v);

%>

volver

Recuperar Datos

Los datos que se guardan en la sesión permanecen ahí a la espera de ser utilizados. Para ello es necesario realizar el proceso contrario a cuando se graban, comenzando por la recuperación del objeto de la sesión para empezar a ser tratado. Para poder realizar este paso se utiliza el método getAttribute() (anteriormente se utilizaba el método getValue(), pero este método se encuentra en desuso), utilizando como argumento el nombre que identifica al objeto que se quiere recuperar. getAttribute(java.lang,String nombre) Un ejemplo de recuperación de objetos almacenados en la sesión:

<% HttpSession sesion=request.getSession(); Sesion.getAttribute(“nombre”); %>

Si no existe ningún objeto almacenado en la sesión bajo el identificador que se utiliza en el método getAttribute(), el valor devuelto será null. Por ello habrá que prestar especial atención ya que si se realiza el casting de un valor null el contenedor JSP devolverá un error. Lo mejor en estos casos es adelantarse a los posibles errores que pueda haber.

<% if(sesion.getAttribute(“nombre”)!=null) { String nombre=(String)sesion.getAttribute(“nombre”); out.println(“Contenido de nombre: “+nombre); } %>

Para recuperar todos los objetos de una sesión se puede hacer uso también del método getAttributeNames() de la interfaz HttpSession. Para recoger todos los objetos almacenados en la sesión se recorre el objeto Enumeration que contiene el nombre de todos los objetos que contiene la sesión y que ha sido devuelto por el método getAttributeNames(). Cada nombre de atributo de la sesión se utiliza en la llamada a cada método getAttribute(), que devolverá el objeto correspondiente.

<%@page contentType="text/html; charset=iso-8859-1" session="true" language="java" import="java.util.*" %> <% HttpSession sesion=request.getSession(); String nombre=”Práctica de POO”; Vector v=new Vector(); v.addElement(new String("Lunes")); v.addElement(new String("Martes")); v.addElement(new String("Miercoles")); v.addElement(new String("Jueves")); v.addElement(new String("Viernes")); v.addElement(new String("Sábado")); v.addElement(new String("Domingo")); sesion.setAttribute("diasSemana",v); sesion.setAttribute("nombre",nombre); %>

Con el siguiente código se recupera los objetos

<%@page import="java.util.*" session="true" %> <% HttpSession sesion=request.getSession(); Enumeration enum=sesion.getAttributeNames(); String nombreAtributo;

while (enum.hasMoreElements()) {

nombreAtributo=(String)enum.nextElement();

out.println("Atributo:"+nombreAtributo);

if(nombreAtributo.equals("diasSemana")) {

Vector v= (Vector);

sesion.getAttribute("diasSemana");

for(int i=0; i out.println("Dia:"+(String)v.get(i));

}

} else

out.println(""+sesion.getAttribute(nombreAtributo)+""); } %> volver

Resumen

Principales métodos:

• Object getAttribute(String nombreAtributo): devuelve el objeto almacenado en la sesión actual, y cuya referencia se corresponde con el nombre de atributo indicado por parámetro como un objeto de la clase String. Sea cual sea la clase del objeto almacenado en la sesión, este método siempre devolverá un objeto de la clase genérica Object, a la hora de recuperarlo se deberá realizar la transformación de clases correspondiente. Este método devuelve null si el objeto indicado no existe.

• Enumeration getAttributeNames(): este método devuelve en un objeto Enumeration del paquete java.util, que contiene los nombres de todos los objetos almacenados en la sesión actual.

• long getCreationTime(): devuelve la fecha y hora en la que fue creada la sesión, medido en milisegundos desde el 1 de enero de 1970.

• String getId(): devuelve una cadena que se corresponde con el identificador único asignado a la sesión. Luego se ve que este valor se corresponde con el valor de el cookie.

servlets (servlet container) destruirá la sesión, liberando de la memoria todos los objetos que contiene la sesión que ha caducado.

• void invalidate(): este método destruye la sesión de forma explícita, y libera de memoria todos los objetos (atributos) que contiene la sesión.

• boolean isNew(): devuelve verdadero si la sesión se acaba de crear en la petición actual o el cliente todavía no ha aceptado la sesión (puede rechazar el cookie de inicio de sesión).

• void removeAttribute(String nombreAtributo): elimina el objeto almacenado en la sesión cuyo nombre se pasa por parámetro. Si el nombre del objeto indicado no se corresponde con ninguno de los almacenados en la sesión, este método no realizará ninguna acción.

• void setAttribute(String nombre, Object valor): almacena un objeto en la sesión utilizando como referencia el nombre indicado como parámetro a través de un objeto String.

volver