Foros del Web » Programación para mayores de 30 ;) » Java »

JSP: Controlar cierre de sesión (expirada o por cierre de navegador)

Estas en el tema de JSP: Controlar cierre de sesión (expirada o por cierre de navegador) en el foro de Java en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 04/02/2012, 16:32
 
Fecha de Ingreso: enero-2012
Ubicación: Santiago de Surco, Lima - Perú
Mensajes: 266
Antigüedad: 12 años, 3 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
  #2 (permalink)  
Antiguo 05/02/2012, 05:31
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: JSP: Controlar cierre de sesión (expirada o por cierre de navegador)

Controlar la sesión desde la BBDD no es buena idea precisamente por lo que estás contando, si el usuario no hace lo que debe, la base de datos queda desactualizada.

Puedes probar a controlar el evento de cierre de sesión con

http://stackoverflow.com/questions/1...h-jsp-servlets

o el método finallize().

Personalmente, a menos que hubiera una muy buena razón, no mezclaría sesión y BBDD.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 10/02/2012, 02:15
 
Fecha de Ingreso: enero-2012
Ubicación: Santiago de Surco, Lima - Perú
Mensajes: 266
Antigüedad: 12 años, 3 meses
Puntos: 57
Respuesta: JSP: Controlar cierre de sesión (expirada o por cierre de navegador)

Gracias por responder.

y claro que comparto tu idea el de no mezclar session y BBDD, nunca antes habia hecho esa "mezcla" con otros sistemas pero en este caso es necesario contar con esa información en la base de datos.

Ahora en cuanto a la primera opcion que me das, estoy muy alejado en el tema de servlets pero la de Finalize() si me llamo la atancion pues yo la uso en mi clase para la conexion a DB.

Código:
@Override
    protected void finalize() throws Throwable {
        if (!connection.isClosed()) {
            connection.close();
            connection = null;
        }
        super.finalize();
    }
lo utilizo antes de terminar la clase Conexion para poder cerrarla.

No se si me podrías dar un "empujón" (idea) para saber como usarla en mi session y poder usarla para controlarla, no te pido todo un ejemplo completo, solo una idea para este caso y poder enetenderlocompletamente.

Muchas gracias y disculpa por la demora en contestar.
  #4 (permalink)  
Antiguo 10/02/2012, 14:57
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: JSP: Controlar cierre de sesión (expirada o por cierre de navegador)

Tú utilizas finalize para la conexión de BBDD, pero todos los objetos de java tienen su finalize().

Si quieres modificar la conducta de la sesión al desaparecer, tendrás que crear tu propia clase extendida de HttpSession, sobreescribir su método finalize() y usarla en vez del httpSession

http://www.janeg.ca/scjp/gc/finalize.html

Otra opción sería mediante un timer recorrer cada cierto tiempo las sesiones abiertas, y cuando una desaparezca ejecutar lo que sea que necesitas. Pero tampoco me parece buena idea.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #5 (permalink)  
Antiguo 11/02/2012, 13:13
 
Fecha de Ingreso: enero-2012
Ubicación: Santiago de Surco, Lima - Perú
Mensajes: 266
Antigüedad: 12 años, 3 meses
Puntos: 57
Respuesta: JSP: Controlar cierre de sesión (expirada o por cierre de navegador)

Muchas gracias Xerelo!!!

Etiquetas: httpsession, jsp
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:07.