Eu programo em PHP, tenho alguns conhecimentos de Java (acadêmicos…) e estou com uma dúvida. Meu site é restrito a usuários cadastrados. No momento do login eu gravo a hora de entrada numa tabela mysql. Na hora que ele clica em SAIR, tenho que gravar a hora da saida. Acontece que muitos nao clicam em SAIR, simplesmente fecham o browser ou mudam de endereço. Li alguma coisa a respeito de que é possível fazer uma aplicacao em java (cliente/servidor), parece que é um servidor de socket e um applet na página, que no momento em que o user abandona a página manda uma mensagem via socket contendo o login, a data e hora da saida. O servidor recebe a mensagem e dispara uma thread que calcula o tempo e grava no BD. Alguém poderia me dar uma ideia de como implementar isso? O que eu preciso ter no servidor para que essa aplicação rode? Utilizo win nt com apache, funciona ou tem que usar o tomcat? É muito complexo de fazer?
Grata
Para fazer isso com servlets, voce rpecisa adicionar um SessionListenera sessao do usuario.
Uma sessao (igual ao session do php) comeca na hora que voce cria ela, e termina X minutos depois da ultima visita que esta pessoa fez no seu site.
Quando a sessao for destruida, voce sera avisada, sabendo assim que o usuario provavelmente fechou o browser, sem clicar em sair.
Mas isso de fazer um socket eh loucura! primeiro que se a pessoa tivesse firewall, daria problemas, outra coisa, vc precisaira ter outro programinha em java rodando sem ser o tomcat. Mais um detalhe: se o usuario desligar o micro na tomada, voce nao vai receber esse “sinal”. O SessionListener veio pra isso mesmo.
estou usando php. O que eu queria saber é se seria viável colocar essa outra aplicação junto, só para controlar a saida do usuário ou se isso só funciona qdo se usa servlets.
>Uma sessao (igual ao session do php) comeca na hora que voce cria >ela, e termina X minutos depois da ultima visita que esta pessoa fez no >seu site.
>
>Quando a sessao for destruida, voce sera avisada, sabendo assim que o >usuario provavelmente fechou o browser, sem clicar em sair.
Pois é, a sessão é destruída automaticamente depois de um tempo de inatividade, acontece que tenho que gravar isso em tabelas para gerar estatísticas. Ou seja, além de destruir a sessao é necessário gravar na tabela a hora do logoff. Implementei isso atraves de um campo timestamp na tabela de users online, onde a cada pagina requisitada ele verifica os acessos que excederam 10 minutos de inatividade, elimina-os e grava na tabela de acessos. Dessa forma, se o usuario sair sem efetuar o logoff, terei a hora aproximada da saida (no max. 10 minutos depois). Isso funciona bem, na verdade só fiquei curiosa sobre essa historia da aplicacao com socket.
Mas valeu a dica
No zipmail eh assim: nao importa se vc de logout ou feche o browser ou mude a url, ele abre uma janelinha pequena falando q fez logout automatico e tal… Acho q deve usar esse esquema do onUnload.
Olha, com PHP não tem nada pronto para fazer isto não
e a opção dos listeners só funciona se a aplicação fosse toda com servlets
mas você pode usar o unload sim
coloque toda a aplicação dentro de um frame, com uma linha invisivel (tamanho 0px) que vai chamar o unload quando preciso, e no outro frame onde a aplicação ta rodando, fica tudo como hoje
ai quando o cara fechar o browser, vai rodar o unload do frame invisivel