Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá!
Tenho uma dúvida, mais em relação a lógica de programação, sabendo a lógica eu faço no php de boa.
Estou estudando Flex (Adobe Flash Builder) e como linguagem de servidor estou utilizando o PHP.
Fiz um script em php que retorna os usuários em XML para que o flex consiga interpretá-lo.
Na minha tabela, quando o usuário acessa com seu login e senha acontece um UPDATE no mysql (via Php) setando o online para 1.
Eu criei um botão para fazer Logoff também. Logo quando a pessoa clica, acontece um UPDATE e no campo `logado` fica como 0.
Até aí beleza, eu listo quem está online e quem está offline.
O problema é:
Se eu fizer login e o programa fechar, o usuário continua online.
Se eu criar uma função para quando fechar o programa o usuário ficar offline, será uma 'gambiarra', pois se acontecer de fechar via gerenciador de tarefas o mesmo erro irá acontecer. Ele seguirá online.
Percebi que isso também aconteceria caso desenvolvesse um chat somente com Php e Ajax.
Como é possível criar uma lógica para que se o usuário sair, de fato ficar offline??
Como que os chats e mensageiros instantâneos fazem isso?
Lembrando, não quero código e sim lógica de programação.
Acho que a saida é de fato via SESSÃO, já que quando fecha o navegador esta SESSÃO morre. Eu faria assim.
Não sei se a idéia do @rockrgo funcionaria, por que não tem como o servidor saber qual usuário está utilizando a sessão $_SESSION['login'] por que cada máquina que acessa o site gera essa sessão localmente, eu posso ter 1.000.000 de $_SESSION['login'] ativas em máquinas diferentes, mesmo sendo assim: $_SESSION['login'] = "Fulano"; ocorreria o mesmo problema que ele citou acima se o usuário fechar o navegador a sessão é quebrada e nada acontece com o DB, o que funcionaria seria algo mais complexo utilizando ajax, crie uma página onde a mesma faça essa troca de status no banco de dados, e em cada página do seu site vc coloque uma função que envia por ajax o valor da session para esta página de troca a cada 10 segundos (isso vc define), e nessa página de troca vc determina que ela irá guardar no DB a hora em que FULANO enviou a solicitação por ajax, como essa página vai percorrer o banco todo vc faz assim se o campo hora status do usuario FULANO for 1 olhe o campo hora, se a diferença dessa hora salva for maior que 20 segundos (por exemplo) mude para 0 o campo de status (por que vc sabe que seu código manda por ajax informações a cada 10 segundos e se está a mais de 20 segundos no DB ele deixou a pagina), não sei se fui claro ou se deixei coisas pelo ar, mas qualquer dúvida tamo ai para ajudar.!
Brilhante Gaw!!
Com certeza dará certo! E talvez não fique tão pesado, pois nas verificações eu só verificarei quem estiver com 1.
Deve ser assim que o msn trabalha.
Vou utilizar o timestamp para isso. Acho que será melhor.
Muito obrigado pela ajuda.
Que isso cara, disponha sempre!
Não seria mais fácil vc simplesmente atribuir o valor do campo status a sessão, puxando pelo id do usuário?
Thiago Moraes
O problema é que se o usuário fechar o navegador, ele continuará online, pois com a página fechada não será possível modificar no banco de dados.
Vo fazer isso na prática amanha a tarde (já que não trabalho) haha
Acho que não entendi muito bem, vc quer só mostrar que o fulano está online ou quer contar quantas pessoas está online?
Cara costumo utilizar sessão para a parte de login. Você pode tentar criar um código onde se existir a $_SESSION['login'] seu banco fique 1 e se não existir fique 0.
Nunca tentei fazer desta forma, mas fica aí um opção para você!
Espero ter ajudado!