Ajuda com Logout

9 respostas
J

Pessoal, estou com uma duvida…

Eu tenho minha JSP de LOGIN e uma de consulta…
Que funciona assim, o usuario se loga na jsp de LOGIN que direciona para a jsp de CONSULTA

O meu problema eh que quando o usuario sai da tela sem dar o logout, ao entrar novamente, a tela de login ja esta preenchida(mas nao logada) E se voce loga, os campos da pagina de consulta ja vem preenchido.

Eu queria saber como eu posso dar um logout toda vez que o usuario sair da tela pelo o “X” ou pelo logout.

Eu tentei dar uma procurada aqui e no google, mas nao achei nada que realmente me tirasse essas duvidas!!!

9 Respostas

luciano2

Provavelmente você esta trabalhando com objetos na sessão. Ao entrar na servlet de login seta null em todos os objetos na sessão ou use o session.removeAtributte().

J

Realmente eu estou trazendo dados da sessao... Vou tentar setar nul... mas eh assim?

public class LoginHandler implements Serializable{

	private static final long serialVersionUID = 1L;

	private String login = null;
	private String senha = null;

E se o usuario voltar a pagina pro login, ele deixa voltar...No caso deveria expirar... Alguem sabe como fazer isso!?

ramos

Bom dia!

Pra forçar a expiração tenta:

session.invalidate();
luciano2

Não sei que framework vc está usando, eu uso struts e sempre que vou setar algo na sessão eu uso:
request.getSession.setAtribute(name,value);

para limpar eu uso:
request.getSession.setAtribute(name,null);

não sei se é uma boa prática mas eu faço assim e funciona.

J

Ta, acho que entendi.

Mas onde eu coloco tudo isso?? Na minha Handler? Na minha jsp? Na minha VO?

luciano2

Na sua handler.

ramos

juju.pikenaa:
Ta, acho que entendi.

Mas onde eu coloco tudo isso?? Na minha Handler? Na minha jsp? Na minha VO?

Isto depende.

Se você estivesse usando apenas JSP, por exemplo, poderia colocar estes códigos de limpeza no JSP para o qual você navega ao clicar em logout.

No caso de Struts (1.x) você poderia colocar no método principal da Action que você executa ao sair.

Como nosso colega disse na mensagem anterior, vai variar de acordo com o framework que você estiver usando.

Espero ter ajudado.

J

Entao, eu estou usando JSP mesmo.
Eu nao entendo muito o que vcs querem dizer quando dizem framework…

Mas de qualquer forma, eu imagino que se eu colocar na minha jsp no logout, soh adiantaria se o usuario desse logout… No caso,se ele sair pelo x… A hora q ele entra, continua trazendo os dados…

E quanto colocar null para as minhas variaveis, tbm nao adiantou!

ramos

Você pode pensar num framework como se ele fosse um template (modelo) de projeto web equipado com um conjunto de componentes pra facilitar o desenvolvimento.

Existem explicações melhores e mais acadêmicas. Mas fazendo uma comparação: usar JSP puro é como construir uma casa usando tijolos e usar um framework é como construir uma casa usando material pré-moldado (paredes semi-prontas pra encaixar e coisas similares).

Pra forçar a o logout ao fechar o navegador, uma opção é você tratar o evento onBeforeUnload da sua página via JavaScript e chamar seu logout via AJAX.

Não é uma solução perfeita, mas pode quebrar o galho. Pra falar a verdade, tem uma aplicação em que eu uso isto.

Vamos supor que para limpar as variáveis da sessão e usar o invalidate você aguarde um parâmetro sair=1 numa página login.jsp.

Você precisaria colocar em todas as suas páginas:
<body onBeforeUnload="fecharSessao()">
Acima da tag você precisaria implementar esta função em JavaScript, mais ou menos assim:
<script language="javascript">
function fecharSessao() {
  httpReq("login.jsp?sair=1", "fecharSessao_Back")
}

function fecharSessao_Back() {
  // Não faz nada, mas é necessária como callback do AJAX
}
</script>
ATENÇÃO Esta função httpReq não é padrão do JavaScript, mas você consegue copiar o código dela em qualquer artigo de AJAX que encontrar através do Google. Pra complicar um pouco mais... o evento onBeforeUnload é chamado toda vez que você navega entre as páginas. Daí vem a parte "imperfeita" da solução. Pra você saber que foi clicado no fechar, precisa adicionar mais um código pra verificar as coordenadas do mouse antes de chamar o logout. Se a coordenada Y estiver em determinada posição Y acima da barra de endereços, daí você "presume" que foi clicado no fechar e chama o AJAX para o logout.

Falando tudo isso dá pra imaginar que o processo é complicado. Mas se alguém tiver uma solução mais simples eu também gostariade saber :)

Criado 30 de abril de 2010
Ultima resposta 30 de abr. de 2010
Respostas 9
Participantes 3