Aplicação cliente/servidor

Olá Pessoal

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 :slight_smile:

Voce esta usando servlets ou php afinal?

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 :smiley:

Se me permitem, vou sugerir outra coisa, mas não tem nada a ver com Java:

Use o “onUnload” na página que o user não pode fechar, redirecionando pra outra página que fará o registro da hora de saída.

Exemplo:

<body onUnload=“window.location.href=‘saida.php’;”>

Fiz isso num chat que fiz em ASP. Como o conceito é em JavaScript, acredito que em PHP tbm funcione.

Abraços

O zipmail usa esse negocio do onUnload, nao usa???

FLC,

Nunca usei o zipmail, mas o onunload é um evento muito comum e útil no JavaScript, portanto deve ser usado em muitos lugares. :slight_smile:

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.

Provavelmente sim.

[]'s

Nesse caso do javascript, se voce bootar o micro, nao vai ser chamado o onUnload :slight_smile:
Entao eh melhor confiar no SessionListener

o unload nao funciona se o usuario se desconectar

Galera
já tentei o unLoad, mas nao dá porque sao várias páginas de acesso restrito, assim cada vez que muda de página ele faz o logoff tb.

Olha, com PHP não tem nada pronto para fazer isto não :frowning:
e a opção dos listeners só funciona se a aplicação fosse toda com servlets :slight_smile:
mas você pode usar o unload sim :slight_smile:

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 :slight_smile:

ai quando o cara fechar o browser, vai rodar o unload do frame invisivel :slight_smile: