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

BotónATRAS del navegador

Estas en el tema de BotónATRAS del navegador en el foro de Java en Foros del Web. Hola, ya estoy un poco desesperada!! resulta que tengo una página web dinámica generada con struts y a la que solo se puede aceder mediante ...
  #1 (permalink)  
Antiguo 19/03/2007, 10:43
 
Fecha de Ingreso: enero-2007
Mensajes: 156
Antigüedad: 17 años, 10 meses
Puntos: 1
BotónATRAS del navegador

Hola, ya estoy un poco desesperada!! resulta que tengo una página web dinámica generada con struts y a la que solo se puede aceder mediante una autenticación previa de usuarios.

Bien, pues resulta que lo hace todo genial, incluso me distingue entre varios perfiles de usuarios, pero el problema está en que cuando cierro la sessión con:
Código:
request.getSession().invalidate();
y me redirige a la pagina de login, si le doy al botón retroceder de mi navegador me vuelve a mostrar la página última que estuvo visitando la persona logeada.

He probado casi todo: compruebo la existencia de usuario en todos los Actions y en todas las páginas jsp y he creado un filtro JEE.

Nada de esto me soluciona el problema. También es cierto que únicamente me muestra la página anterior, cualquier otro intento de realizar alguna acción no lo permite; pero si voy retrocediendo con el botón del navegador es capaz de llegar incluso a una página con datos privados...

¿qué hago? Por favor ayuda!!

Gracias, un saludo
  #2 (permalink)  
Antiguo 19/03/2007, 11:21
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 21 años, 1 mes
Puntos: 51
Re: BotónATRAS del navegador

Lo unico que puedes hacer es decirle al navegador que no cachee las páginas, pero aun así hay navegadores que se pasan las directivas de no-cache por el forro en el caso del back.

Otra opción es que toda tu aplicación se ejecute en una ventana que hayas abierto tu con JavaScript y que al hacer un logout la cierres (solo funciona si la aplicación la has abierto tu con JavaScript), pero no es algo que guste mucho a los usuarios.

Existen opciones para evitar que te puedan reenviar formularios haciendo back+reload, pero evitar el back completamente (u hoy en dia el uso de pestañas) es bastante problematico si no es abriendo ventana nueva.

Cerrar la ventana/pestaña es en parte responsabilidad del usuario pero si no se le puede delegar, entonces hay que entrar en "cochinadas" tipo nuevas ventanas, cargar todos los contenidos a través de frames o AJAX...

No es un problema de Java, si no un problema de cualquier tecnologia basada en el navegador, ya que estos fueron pensados para recordar la información de los usuarios, no para olvidarla.

Todo depende de cuan importante es realmente evitar esa posibilidad.

S!

Edit: He leido otra opción de usar JavaScript para comprobar la exitencia o no de una cookie, blah blah, pero el problema básico es que si se desactiva JavaScript....
  #3 (permalink)  
Antiguo 19/03/2007, 13:17
 
Fecha de Ingreso: enero-2007
Mensajes: 156
Antigüedad: 17 años, 10 meses
Puntos: 1
Re: BotónATRAS del navegador

Ya me lo temia, pero gracias por el interés.

Saludos!!!
  #4 (permalink)  
Antiguo 19/03/2007, 17:54
 
Fecha de Ingreso: junio-2004
Mensajes: 43
Antigüedad: 20 años, 5 meses
Puntos: 0
Re: BotónATRAS del navegador

Yo también tengo un botón que desconecta al usuario. En cada Action compruebo si el usuario está identificado por lo que cuando cierre su sesión pero vuelva a atrás a la página anterior mediante el botón atrás del navegador, podrá ver el antiguo contenido pero cualquier llamada a algún Action detectará que su sesión no existe por lo que no dejará seguir haciendo nada.

Vamos, que cerrar la sesión la cierra bien. He aquí mi código por si te sirve:

response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
response.setHeader("Expires","0");
HttpSession session = request.getSession();
session.invalidate();

Un saludo.
  #5 (permalink)  
Antiguo 20/03/2007, 01:41
 
Fecha de Ingreso: enero-2007
Mensajes: 156
Antigüedad: 17 años, 10 meses
Puntos: 1
Re: BotónATRAS del navegador

Muchas gracias Rascayu, pero sigo teniendo el mismo problema: me pasa lo que tu dices, que carga la página anterior pero no deja ejecutar ningún Action. El problema es que si se va hacia atras continuamente con el botón del navegador no tiene límite y perfectamente se puede llegar hasta la página de consulta de datos privados de la empresa.

Tu código:

response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
response.setHeader("Expires","0");
HttpSession session = request.getSession();
session.invalidate();

funciona exactamente igual sin las tres pimeras líneas, pues realmente no se como hace el navegador para saltarselas.

Saludos!! (y si consigues algo ya dirás cómo!!! )

Última edición por solyluna; 20/03/2007 a las 01:44 Razón: Ortografía
  #6 (permalink)  
Antiguo 31/03/2007, 11:23
 
Fecha de Ingreso: enero-2007
Mensajes: 156
Antigüedad: 17 años, 10 meses
Puntos: 1
Re: BotónATRAS del navegador

Hola a todos!! Resulta que despues de dar muchas vueltas he conseguido que tras cerrar la session no se cargue la página anterior mediante el botón "Atras" del navegador.
Simplemente le añado en las jsp's el siguiente código:
Código:
<%
response.setHeader( "Pragma", "no-cache" );
response.addHeader( "Cache-Control", "must-revalidate" );
response.addHeader( "Cache-Control", "no-cache" );
response.addHeader( "Cache-Control", "no-store" );
response.setDateHeader("Expires", 0);
Usuario u=(Usuario)request.getSession().getAttribute("usuario");
if (u==null){
%>
<logic:forward name="error"/>

<% } %>
Todo esto antes de cualquier etiqueta propia de html.

En fin, a mi me ha costado más de un mes dar con la solución y espero que le pueda servir de ayuda a alguien.

Saludos
  #7 (permalink)  
Antiguo 02/05/2007, 13:20
 
Fecha de Ingreso: abril-2007
Mensajes: 13
Antigüedad: 17 años, 6 meses
Puntos: 0
Re: BotónATRAS del navegador

MUchas gracias por compartirlo solyluna, yo tenía el mismo problema para un proyecto de finald e curso, y lo he podido solucionar :D

GRacias!!
  #8 (permalink)  
Antiguo 03/05/2007, 06:23
Avatar de duendeduende  
Fecha de Ingreso: mayo-2007
Mensajes: 38
Antigüedad: 17 años, 6 meses
Puntos: 0
Re: BotónATRAS del navegador

Habeis probado alguno a poner removeSession(), en lugar de invalidate??
Con este comando te borra la sesion , y kizas cuando vuelvas atras, ya no exista!=!=
  #9 (permalink)  
Antiguo 03/05/2007, 06:38
 
Fecha de Ingreso: enero-2007
Mensajes: 156
Antigüedad: 17 años, 10 meses
Puntos: 1
Re: BotónATRAS del navegador

Yo lo probé y a aprte de eso con invalidate tambien la "borra" en cierto sentido (al menos es lo que yo entendi) el caso es que se recargaba de la cache pues en ese caso no hacía comprobaciones.
  #10 (permalink)  
Antiguo 22/06/2007, 20:42
 
Fecha de Ingreso: febrero-2007
Ubicación: Barranquilla, Colombia
Mensajes: 181
Antigüedad: 17 años, 9 meses
Puntos: 3
Re: BotónATRAS del navegador

Código PHP:
Usuario u=(Usuario)request.getSession().getAttribute("usuario"); 
Usuario de donde sale?
__________________
Jose Luis Bernal Zambrano
Please response to:
[email protected]
  #11 (permalink)  
Antiguo 23/06/2007, 01:19
 
Fecha de Ingreso: enero-2007
Mensajes: 156
Antigüedad: 17 años, 10 meses
Puntos: 1
Re: BotónATRAS del navegador

A ver, se supone que si quieres crear un regisro (de lo que sea) en mi caso son usuarios, y la clase Usuario es la clase en la que almaceno los datos del usuario que está registrado en ese momento en el sistema.

Por eso, al cerrar sesión se borra el atributo "usuario" de la session y si éste no existe al intentar retroceder con el botón atras del navegador dará un error pues estas intentando acceder a una información de usuarios.
  #12 (permalink)  
Antiguo 22/05/2009, 10:00
Avatar de saman0suke  
Fecha de Ingreso: abril-2009
Mensajes: 180
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: BotónATRAS del navegador

Excelente aporte solyluna, la verdad que tenia problemas con ello y ahora esta todo solucionado :D solo que cambie un poco el codigo, ya que mi variable de sesion esta ya almacenada mediante el Servlet asi que no tuve necesidad de llamar a la clase Usuario en el JSP:

Código PHP:
<&#37;
response.setHeader"Pragma""no-cache" );
response.addHeader"Cache-Control""must-revalidate" );
response.addHeader"Cache-Control""no-cache" );
response.addHeader"Cache-Control""no-store" );
response.setDateHeader("Expires"0);

if (
session.getAttribute("nombre")==null){
%>
<
logic:forward name="error"/>

<% } %> 
Gracias de nuevo, me has salvado la vida :D un saludo!
  #13 (permalink)  
Antiguo 12/04/2012, 15:25
 
Fecha de Ingreso: noviembre-2011
Mensajes: 2
Antigüedad: 13 años
Puntos: 2
De acuerdo Respuesta: BotónATRAS del navegador

este tema me ha salvado la vida muy util!!!!!!!!
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

SíEste tema le ha gustado a 2 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 13:14.