Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/02/2012, 16:32
gebremswar
 
Fecha de Ingreso: enero-2012
Ubicación: Santiago de Surco, Lima - Perú
Mensajes: 266
Antigüedad: 12 años, 9 meses
Puntos: 57
Pregunta JSP: Controlar cierre de sesión (expirada o por cierre de navegador)

Saludos a todos en FDW!!!

Veran uds, tengo una aplicacion web que he estado desarrollando (JAVA-POSTGRESQL), misma que solo pueden acceder usuarios registrados ya que al ingresar solo muestra un panel de LOG IN. En la BD tengo una tabla que registra la sesión iniciada y también registra cuando cierran sesión (es uno de los requerimientos y es imprescindible).

Todo bien hasta ahi, pero el primer problema surge cuando la session expira tras 15 minutos de inactividad (así lo he programado en el fichero "web.xml" y es necesario)

El segundo problema que tengo es cuando el usuario no cierra la sesion al hacer click sobre el boton que tiene destinado para esa funcion y a causa de esto no se registra en la auditoria.

Para comprender mi problema acontinuacion explico como manejo el inicio y cierre de session.

Mi aplicacion la he programado en MVC asi que solo explicaré los JSP que intervienen en login mas no las clases de acceso a datos etc.

los ficheros: login.jsp - validarlogin.jsp - logout.jsp

- login.jsp:
muestra un formulario para ingresar usuario y password el cual envía los datos a "".

Código:
//-
//Es un simple formulario con dos input text 
//y un submit con el action del mismo hacia el fichero validarlogin.jsp
//por eso no crei necesario poner el codigo html
//-
- ValidarLogin.jsp:
el cual copara los datos ingresados con los consultados en base de datos y de acuerdo a esto concede la sesión o no (uso el httpsession ) y es ahí donde también realizo la inserción a la tabla "auditoria" con los datos necesarios de ser concedido el acceso.

Código:
<%
    //recibo los valores desde el login
    user = request.getParameter("txtUser");
    pass = request.getParameter("txtPass");

    if (user != null & pass != null) {
        //proceso: uso un metodo que consulta la DB y devuelve el ID
        int id = usuarioDAO.Loguearse(user, pass);
        if (id > 0) {//si devuelve un ID mayor a cero continua
            rsUsuario = usuarioDAO.ubicarUsuario(id);
            //obtengo el resto de datos del usuario con otro metodo

            //guardo los datos en session con "httpsession "

        } else {
            //de lo contrario me envia nuevamente a login.jsp
        }
    }
%>
- Logout.jsp:
contiene un código simple que invalida la sesión cuando se accede directamente a el por medio de un enlace disponible en la pagina principal mostrada después de haberse autentificado correctamente.

Código:
<%
//INVALIDAR SESSION
UsuarioDAO usuarioDAO = new UsuarioDAO();//creo mi objeto
//verifico que la session no sea nula
    if (session.getAttribute("s_usua_login") != null) {
        //almaceno el id del usuario logueado en idUser 
        int idUser = (Integer) session.getAttribute("s_idUsuario");

        //es aqui donde uso el metodo que inserta en 
        //auditoria el cierre de session
        usuarioDAO.Logout(idUser);

        //y finalmente invalido la session
        session.invalidate();
        response.sendRedirect("index.jsp"); 
    } else {
        response.sendRedirect("logout.jsp");
    }
%>
Eso es lo que no he podido controlar en ambos casos ya bien sea cuando la session expira o cuando no acceden al enlace de logout por cerrar el navegador. que dicho sea de paso cuando cierran el navegador tambien la session se invalida sola pero el registrar en la auditoria el cierre escapa de mis manos.

Espero haber sido claro al explicar mi problema para que alguien pueda darme una idea de como controlar esos dos casos ya bien sea con codigo java, javascript, etc.

Por si las dudas, aclaro que no estoy usando ningun framework.

Sea cual sea la solución o propuesta bienvenida sea, muchas gracias.

Última edición por gebremswar; 04/02/2012 a las 19:14 Razón: ordenar un poco el código citado