Fechar sessao ao clicar no botão de fechar do browser

5 respostas
D

Eai pessoal, temos uma aplicação aqui na empresa onde o usuario participa de uma sala de disputa de pregão eletronico, nessa pagina é mostrada quantos participantes está na sala, ate ai blz. Mas o nosso problema é quando o usuario fecha a sala clicando no botão fechar do browser, assim a sessão do cara permanece ativa. Gostaria de saber se existe alguma maneira de controlar quando o usuario fecha a janela pelo botao fechar do browser, se é possivel chamar alguma classe que mate a sessao do cara e grave um registro na base no nosso caso ou qualquer outra coisa. Desde já agradeço.

5 Respostas

R

Chame o método invalidate() na sessão.

J

Da mesma forma que você chama uma classe pra fechar a sessão ao clicar no botão Fechar da tela, você pode fazer isso ao fechar a janela do browser. Funciona ao clicar no X do canto superior direito ou o ALT+F4.

Na tag você coloca a propriedade onUnload e direciona esse evento para uma função que chamará a sua classe que atualmente faz o invalidate.

Ex.:
function fechaSessoa() {
  .....
  .....
}

<body onUnload="fechaSessao()">
<input type="button" name="close" value="Sair" onClick="fechaSessao()">
M

Seguinte,

O mecanismo que você irá utilizar é algo bem parcedio se não identico ao que se utiliza em uma sala de chat para identificar que o usuário fechou o navegador e tirá-lo da conversa.

Não existe nada pronto que lhe permita fazer isso, não adianta nem perder tempo procurando pois não existe nenhum modo pronto de identificar do lado do servidor que o cliente fechou a janela ou que a máquina dele travou, e etc…

Oque pode ser feito é o tratamento de alguma exeção que irá ocorrer caso o usuário não esteja mais ali para receber a ação como por exemplo em um chat essa exceção iria ocorrer quando o script do lado do server tenta-se escrever na tela do usuário nesse momento essa tela não iria mais existir pois o usuario fechou o navegador então iria ocorrer uma exceção, na hora de dar o .write(). Você fazendo o tratamento desse erro de acordo com a sua necessidade lhe permitiria saber que o usuário saiu.

Provavelmente no seu script você também consegue fazer isso em algum pedaço, pois você dever ter diversas threads rodando para trazer os dados em tempo real para o usuário mantendo uma conexão alive pelo HTTP entre o navegador e o servidor.

[]s

M

Um detalhe vc pode até utilizar essa forma que o julianostr lhe passou acima é a forma mais facil de tratar isso, mas também é a forma onde você terá mais problemas pois nem sempre isso é executado e no caso nem sempre você irá conseguir ter o resultado esperado.
Esse método é utilizado se colocando nessa função fechaSessoa() um outro método que abre uma nova janela window.open() ai sim você sempre terá seu script executado, pelo menos antigamente antes de criarem o anti pop-up.

[]s

J

É isso mesmo marciocamurati, o modelo que eu passei (incompleto…) como exemplo é utilizado pelo banco Bradesco. Ao fechar a janela principal ele abre uma outra.

Bem lembrado…

Criado 1 de agosto de 2006
Ultima resposta 1 de ago. de 2006
Respostas 5
Participantes 4