Boa tarde galera.
Estou com uma tremenda dúvida: é possível invalidar uma sessão ao fechar a janela do browser? Digo isso pois tenho um pequeno aplicativo, com filtro e tudo funciona perfeitamente. Adicionei um botão para efetuar um logout e tudo funciona muito bem, invalidando a sessão perfeitamente. Agora vêm as complicações: se eu clicar no botão voltar do browser, retorno para a tela do sistema. Não é possível fazer nada pois o filtro intercepta que não há sessão e redireciona para a tela de login. Primeira pergunta: como evitar que ao clicar no botão voltar do browser me exiba que a página expirou?
Depois de logado, se eu fechar a janela do browser, eu queria que também se encerrasse a sessão. Mas acontece que, após fechar a janela, se abri-la depois e digitar a url, eu acesso o sistema com todas as funcionalidades. Segunda pergunta: como invalidar esta sessão ao fechar o browser?
Qdo clicar no botão fechar, tenta fechar o browser tbm. Tive um problema parecido e só consegui resolver fazendo isso!!
tenho um post com informações q pode ajudar tbm
O velho problema do botao voltar (aka botao fechar ‘X’)
Essas coisas acontecem no cliente e sao dificies de lidar, pois vc nao consegue controlar isso no servidor…
Tenta usar o metodo history do javascript, passando -1… isso vai fazer que qdo o cara clique no voltar, seja jogado de novo para a pagina no qual ele clicou no botao voltar.
Botão Voltar:
Faça como foi sugerido, coloque um history(1) nas paginas. Se o usuario clicar no voltar, ele volta, mas ao encontrar esse comando vai navegar de volta p/ pagina de origem.
Encerrar a sessao quando fechar o browse:
2 maneiras de fazer:
1- Vc pode capturar o click no fechar do browser(pelas coordenadas) e faazer com que app seja redirecionada para seu logout.
2 - Defina um timeout pequeno para a sessão, tipo 10 segundos. Faca um IFrame oculto nas telas que fique fazendo pooling no servidor de 5 em 5 segundos por exemplo para ficar renovando a sessao. Quando o browser for fechado, não havera pooling e em 10 segundos a sessao expira.
Ja postei essas soluções no forum, da uma procurada.
Inseri o history(1) e funcionou em partes: ao clicar no botão voltar não me redireciona mais para a página anterior mas acontece que quando tento novamente logar no sistema, tenho o erro javax.faces.application.ViewExpiredException que a sessão expirou. Para resolver este contratempo, é necessário dar um refresh na página e volta tudo ao normal. Há como evitar este erro?
Quanto a invalidar a sessao ao fechar o broser não encontrei o post. Alguem poderia me passar o link.
Mais uma vez obrigado pessoal
[quote=Icecold]Inseri o history(1) e funcionou em partes: ao clicar no botão voltar não me redireciona mais para a página anterior mas acontece que quando tento novamente logar no sistema, tenho o erro javax.faces.application.ViewExpiredException que a sessão expirou. Para resolver este contratempo, é necessário dar um refresh na página e volta tudo ao normal. Há como evitar este erro?
Quanto a invalidar a sessao ao fechar o broser não encontrei o post. Alguem poderia me passar o link.
Mais uma vez obrigado pessoal[/quote]
Cara vc tem que usar history(-1) e não history(1)… vc está dando um avançar… e não um voltar desta forma
Se você percebeu. o site do GUJ usa a seguinte técnica: um JSP bem boboca (http://www.guj.com.br/ping_session.jsp) que tem um tag refresh de 60 segundos. Esse JSP é acionado de um IFRAME escondido. (Dê um view source nesta página do GUJ).
Então você pode criar algo parecido: uma página JSP que verifique se um determinado usuário está logado. Quando essa página parar de ser chamada periodicamente para um determinado usuário, provavelmente o browser foi fechado. Agora é questão de pensar como você pode aproveitar essa informação.