Executar uma função que realiza um upload no banco antes que o navegardor feche!
5 respostas
Ricardo_Siqueira_Abr
Na minha aplicação tenho um chat que funciona com ajax e javascript, o chat ta funcionando perfeitamente o meu problema é fazer o usuario ficar offline, pq indico que ele esta oline por um campo binary no banco e uma função com ajax fica atualizando… quando o usuario faz o login eu atualizo esse campo fazendo ele ficar com status online ai se o usuario fizer o logout pelo botão sair direitinho ta tudo certo mas QUANDO ELE SAI PELO BOTÃO FECHAR DO NAVEGADOR OU DA ABA, ALT+F4 OU QUALQUER OUTRO MEIO que não seja o botão sair da aplicação ele fica com status online…
Tentar pegar o evento do botão fechar do browser eu ja desisti, ja pesquisei um monte e mta gente ja tentou fazer isso e não da mto certo tentei fazer uma fução com window.onbeforeunload mas tbm não deu mto certo pq qualquar atualização, link, voltar na pagina ela executa…
Em fim, preciso acha uma solução pra executar uma função que realiza um upload no banco antes que o navegardor feche, ou se alguem souber de uma outra solução pra eu tratar esse esquema de usuario online e offline sei lah… talvez pela sessão, mas acho que msm assim o usuario ainda ficaria online até a sessão ser destruída!!
Eu sei que vc já tentou usar window.onbeforeunload…
mas vc já tentou, além de passar o status para offline, fechar a sessão? Tudo dentro do tratamento do evento?
ErickRAR
Você pode colocar um timeout na session e um Listener, ai quando a session for destruída, fazer o que deseja.
Ricardo_Siqueira_Abr
Rodrigo Vieira Pinto:
Eu sei que vc já tentou usar window.onbeforeunload....
mas vc já tentou, além de passar o status para offline, fechar a sessão? Tudo dentro do tratamento do evento?
Sim.. quando faço o upload tbm ja invalido a sessão.. a logica que eu fiz com o onbeforeunload até funcionou pq eu fiz de uma forma que se clicar em qualquer link do sistema não executa (o que é certo) pq eu uso um boolean pra verificar.. quando o usuario da um voltar pelo navegador ou atualiza a pagina ele executa o codigo e mata a sessão.. (o q não pode acontecer)
segue o codigo que fiz com onbeforeunload...
Script
Não tenho mto conhecimento sobre Listener mas vou dar uma estudada e ver se da certo, mas ai tbm caio no problema em que se a minha sessão tem 20min pra encerrar o usuario ainda vai ficar com status online o tempo que a sessão ainda estiver ativa…
por exemplo se o usuario entrar no sistema e ja fechar o navegador ele vai ficar como online por praticamente 20min.
ai teria que pensar numa forma de deixar a sessão com um timeout em segundos com algo pra ficar renovando a sessão e quando fechar o navegador ela encerra rapidamente…
o jgbt ja postou algo assim aqui no forum…
jgbt:
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.
não encontrei ainda!! se alguem encontrar me manda o link por favor…
mas vou tentar fazer só com essa idéia que ele deu…
Ricardo_Siqueira_Abr
E tem outro problema tbm quanto a ficar renovando a sessão automaticamente… se o usuario deixar o sistema aberto ele nunca vai ser deconectado… a sessão perde parte da sua funcionalidade que é deslogar depois de um tempo inativo!!
que saco, resolve-se um problema e arruma-se outro!!!
já até consegui implementar o listener… mas agora vou cair nesse outro problema…