|
||||||||
|
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 :
* 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 :
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>
|
||||||||