20/12/05                                                                                                

 
   
Estadisticas y contadores web gratis
Manuales Oposiciones
   
    Seguimiento de sesión con Reescritura de URL

Hemos visto que el seguimiento de sesión con cookies implícitas , depende del tratamiento que le haga el lado del cliente en el navegador.

Veamos otra manera . Con la reescritura de URL : Ver Tutorial http://www.programacion.com/java/tutorial/servlets_basico/15/

Del que extraemos :
 

Manejar todos los Navegadores

Por defecto, el seguimiento de sesión utiliza cookies para asociar un identificador de sesión con un usuario. Para soportar también a los usuarios que acceden al servlet con un navegador que no soporta cookies, o si este está programado para no aceptarlas. debemos utilizar reescritura de URL en su lugar.

Cuando se utiliza la reescritura de URL se llama a los métodos que, cuando es necesario, incluyen el ID de sesión en un enlace. Debemos llamar a esos métodos por cada enlace en la respuesta del servlet.

El método que asocia un ID de sesión con una URL es HttpServletResponse.encodeUrl. Si redirecionamos al usuario a otra página, el método para asociar el ID de sesión con la URL redirecionada se llama HttpServletResponse.encodeRedirectUrl.

Los métodos encodeUrl y encodeRedirectUrl deciden si las URL necesitan ser reescritas, y devolver la URL cambiada o sin cambiar. (Las reglas para las URLs y las URLs redireccionadas son diferentes, pero en general si el servidor detecta que el navegador soporta cookies, entonces la URL no se reescribirá).

 

 

* Por ejemplo en cada link o llamada a otro servlet , usando el método de reescritura seria:

 out.println("<BR><a href="+resp.encodeUrl("ServletJDBC")+">Nueva Opinion</a>");
Y para un formulario , si no tiene método action ( o sea que se llama así mismo )habrá que ponerselo tal que:
out.println("<FORM  METHOD='POST' ACTION='"+resp.encodeUrl(req.getRequestURI())+"'>"+ ...

Introducción a las cookies:
En el J2EE existe una clase llamada Cookie
Imaginar un Servlet que recibe un user:password de un login via doPost y verifica
estos datos contra una base de datos. Esta cadena user:password se pone  en  una Cookie y se devuelve al cliente
Cookie authcookie = new Cookie("xyz-Auth", credentials);
authcookie.setVersion(1);
authcookie.setDomain(".xyz.com");
res.addCookie(authcokie);
 
El dominio de la cookie es asignado a .xyz.com y a cualquiercosa.xyz.com ( pero no a c.d.xyz.com )
El atributo dominio es soportado por RFC2109-style Cookies (version 1) pero no por los viejos cookies de Netscape
Todos los servidores web sobre hosts en xyz.com estan corriendo una instancia de otro servlet el cual sirve datos
protegidos despues de verificar la autentificacion de credenciales
 
boolean verified = false;
Cookie[] cookies = req.getCookies();
for(int i=0; i<cookies.length; i++){
  String n = cookies[i],getName(),d=cookies[i].getDomain();
  if(n!=null && n.equals("xyz-Auth") && d!=null && d.equals(".xyz.com")){
     String credentials = cookies[i].getValue();
     verified = verifyCredentials(credentials);
     break;
   }//if
}//for
 
if(!verified) {
   res.sendRedirect(...);
   return;
 }
Las credenciales son recogidas de la cookie y verificado por la autentificación de la base de datos.
Si las credenciales son invalidas o no hay el cliente es redirigido a la  página de login , y
si son válidas se le devuelve el el contendo protegido
   
  Sesion con JSP

Definición de sesión : serie de comunicaciones entre un cliente y un servidor , en el que se realiza un intercambio de información

Una sesión se establece cuando se conecta un cliente por primera vez a una web y finaliza por llegar a un tiempo de inactividad preestablecido

 o por reinicio o fallo del servidor  o por abandonar la web

 

Para poder usar una sesión en una página JSP:  Hay que asignar al atributo sesion ( de la directiva page) el valor true

<%@ page session="true"%>

Mediante la interface HttpSession del paquete javax.servlet.http el contenedor de páginas JSP crea sesiones entre el cliente y el servidor

 

Obtener la sesión :

<% HttpSession sesion = request.getSession(); %>

El identificador de la sesión , único :  con el método getId() :

<% out.println("Identificador de la sesión = "+sesion.getId());%>

 

Veamos otros métodos :

 

<%@ page import="java.util.*"%>

 

<%@page session="true" %>

 

<% HttpSession  sesion=request.getSession();

Date creacion = new Date (sesion.getCreationTime());

Date ultimo = new Date(sesion.getLastAccessedTime());

long duracion = sesion.getLastAccessedTime()-sesion.getCreationTime();

Date laduracion = new Date(duracion);

out.println(" Creacion de la sesion: "+creacion+"<br>");

out.println(" Ultimo acceso: "+ultimo+"<br>");

out.println(" Tiempo navegando: "+laduracion.getMinutes()+" min"+duracion.getSeconds()+" sg ."+"<br>");

 %>

 

 

Implementado en un fichero jsp: Le dás a refrescar despues de cargar la página y ves como cambia

--- index.jsp ----

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@ page import="java.util.*"%>
<%@page session="true" %>
<%--
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
--%>


<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>



    <body>
    <%//response.sendRedirect("http://javcasta.bounceme.net"); %>
    <h1>JSP Page</h1>
   

<% HttpSession sesion=request.getSession();
Date creacion = new Date (sesion.getCreationTime());
Date ultimo = new Date(sesion.getLastAccessedTime());
long duracion = sesion.getLastAccessedTime()-sesion.getCreationTime();
Date laduracion = new Date(duracion);
out.println(" Creacion de la sesion: "+creacion+"<br>");
out.println(" Ultimo acceso: "+ultimo+"<br>");
out.println(" Tiempo navegando: "+laduracion.getMinutes()+" min "+laduracion.getSeconds()+" sg ."+"<br>");
 %>

    
    </body>
</html>