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.
Chame o método invalidate() na sessão.
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.:
[code]function fechaSessoa() {
…
…
}
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
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
É 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…