Ayuda con sesiones

geobasis
07 de Junio del 2005
Hola, por favor alguien sabe que metodo del objeto session debo invocar para saber cuando una session ha terminado por que el usuario ha estado inactivo y ha superado el session timeout, como cuando yahoo o hotmail dicen su session ha expirado vuelva a login ya que en algunos casos me aparece.

404 Not Found
OracleJSP: java.io.FileNotFoundException:
Defina el parámetro de inicialización debug_mode en "true" para consultar el mensaje de excepción completo.

y en otros como que el usuario no ha iniciado sesion.

frantic
07 de Junio del 2005
Hola,

Te comento lo siguiente que quizás pueda ayudarte, la session es un objeto manipulable desde código Java en varios aspectos, puedes asignarle un timeOut, puedes activarla o desactivarla e incluso puedes verificar si es nueva o no.
Por ejemplo para crearle session a un usuario quizás te interese hacerle login antes, luego de que el usuario coloque los datos podrías comprobar que estos sean correctos contra base de datos y en caso afirmativo simplemente crearle una nueva session asignandole parámetros como el timeOut del siguiente modo:

HttpSession session = request.getSession(true); //Creamos la nueva session

session.setMaxInactiveInterval(900); //Estara inactivo 15 minutos maximo (900 segundos)

Otra cosa util que podrias hacer al crear la session es enviarle un Objeto donde tengas datos que utilizarías siempre en la session, como por ejemplo los datos del usuario que luego podrias recuperas desde cualquier jsp o servlet que esté en la aplicación mediante el método session.getAttribute(String).

Luego podrías comprobar si el usuario ya hizo login de una manera muy sencilla con el siguiente código:
HttpSession session = request.getSession();

if(session.isNew()){
//El codigo en caso de que la session sea nueva
}

Si la session es nueva significa que un jsp la acaba de crear, ya que todos los jsp por defecto crean una session en caso de no haber una activa. En este caso existen solo dos posibilidades, que el usuario no haya hecho login, motivo por el cual no tiene creada la session o que el tiempo establecido en el timeOut haya expirado con lo cual para seguir teniendo acceso ya debe hacer login nuevamente, es decir que dentro del If anterior podrias hacerle un redirect a una página de error donde le indiques al usuario que su session expiro y que debe hacer login nuevamente.
También puedes hacer logOut a un usuario y eliminar manualmente su session como lo hace el servidor de hotmail o yahoo cuando le dices cerrar sesion, la instruccion para ello sería:
session.invalidate();

Con eso invalidas la session, en todos los jsp´s y servlets a los que no deseas que un usuario no logeado entre podrias incluir el código de verificación de session.

Espero que esto te sirva de guía para resolver tu problema.
Saludos.-

cualquiera
07 de Junio del 2005
Yahoo y HotMail probablemente guarde la fecha y hora en que te conectas como una cooky, y cada 24hs te pide que te vuelvas a loguear. Dificilmente te interese usar esa política para mantener la sesión en tu aplicación, si la sesión expiró por timeout ya no va a "existir" la sesión y la situación sería igual a que el usuario nunca se hubiera logueado.

Alex
07 de Junio del 2005
Si mencionaras que servidor estas utilizando pues creo q seria de mucha ayuda para comprender, yo se que al usar tomcat, servlets, en el archivo web.xml puedes definir el tiempo de sesion, si gustas puedes investigar por alli de lo contrario seria mejor si fueras mas explicito con el problema.