php - Alguém pode citar exemplos para o status de um usuário? (online & offline) - Stack Overflow em Português
Alguém pode citar exemplos para o status de um usuário? (online & offline)
Então eu estava pensando pegar a tabela de usuários onde o status = online, eu coloquei por padrão "Offline" , mas sei que quando o usuário desligar o computador sem clicar em Log out, a tabela não irá ser alterada parra offline, então quero saber o que é melhor:
Qual vocês me recomendam? Quero fazer dados com "Última atividade" onde se ele fazer qualquer ação que envolva $_GET ou $_POST atualiza a tabela status (vou converter em TIMESTAMP ou DATETIME) a X minutos atrás ou algo assim, quero exemplos por isto não vou colocar minha DATABASE em questão aqui. Grato por todas as opiniões, e exemplos comentados.
(Ainda não entendo como serviços tipo Gmail, Facebook entre outros fazem essa relação entre offline e online, então se alguém também tiver a boa vontade de explicar isto, seja bem vindo)
editada 12/05/15 às 23:28
Kevin mtk
perguntada 12/05/15 às 23:23
64733 medalhas de prata1313 medalhas de bronze
a lógica é simples, como pode ver nas resposta abaixo.. O problema é a técnica usada. Muitos utilizam requisições assíncronas por meio de ajax a partir do lado cliente. Isso provoca um congestionamento de requisições quando o site possui um volume considerável de acessos únicos. Dependendo do dispositivo que acessa, por exemplo, um iPhone, o aparelho esquenta em menos de 1 minuto. A recomendação é usar long pooling. Pesquise sobre Node.js
31/05/15 às 6:19
Use TIMESTAMP creio que ficará mais fácil para você interagir no seu sistema sem erros. O Gmail parece que faz essa verificação com o passar do mouse do usuário (mouseover), pois quando você está por exemplo no bate-papo ele está normal, "online", mas quando você vai para outra aba e passa um x minutos ausente da aba do bate-papo então ele considerá você como "inativo". Após você mover o mouse sobre algum elemento do site então ele deve enviar um comando para o servidor falando "Olha, o Kevin ainda está disponível, então vamos alterar o status dele para online".
respondida 12/05/15 às 23:28
Tudo bem, entendo rsrs. Mas ao invez de "clicar" sobre a body acho mais fácil o passar do mouse no body, pois as vezes o usuário irá retornar a página e só passar o mouse e não vai clicar em nada. Passando o mouse, pelo menos o usuário do outro lado vai saber que ele atualmente está naquela aba.
12/05/15 às 23:34
Seria uma boa você fazer algo parecido com o Google, com bolinhas, "verdes" ou "cinzas". Se você criar 10 minutos = inativo, 15 minutos = offline, para o usuário final talvez fique confuso. Imagina que eu estou "verde" e eu saio do sistema, passa 10 minutos então vai dar como "ausente" sendo que eu já sai e não apenas fiquei ausente, então o usuário do outro lado irá pensar "ele ainda está aqui, jaja ele volto" e não é isso que irá acontecer rsrs. Com bolinhas fica mais fácil do usuário entender. Ou está ON ou está OFF. Se ele voltar então fica "verde" automaticamente.
12/05/15 às 23:45
Você pode usar jQuery para atualizar uma parte do código para você de x em x segundos. Ou se tiver paciência, mas muita paciência tente ver o node.js é uma ótima saida. Procure por Long Polling. Uma referência imasters.com.br/artigo/23436/javascript/…
12/05/15 às 23:52
Entendo. Procure então como fazer um "Chat em PHP" e preste atenção como eles fazem para atualizar o conteúdo sem precisar que o usuário mesmo faça isso. Assim você pega a lógica e coloca no seu. Alguns utilizam <meta> do HTML, outros setTimeOut() do jQuery.
12/05/15 às 23:59
hey hey, tive uma idéia, setInterval para uma função, e fazer .load usuario status.
– Kevin mtk
13/05/15 às 0:06
Olha a resposta é muito simples. Não é feito nenhum tipo de verificação de clique ou coisa parecida na página. A maneira mais simples é verificar o horário que o usuário acessa o sistema e fazer um comparativo de 1 minuto ou menos com o tempo atual se ele estiver fora a mais que 1 minuto por exemplo ele aparece com offline. Para que isso funcione você cria uma rotina que atualiza o horário do usuário enquanto ele estiver online na pagina dessa forma se ele ficar fora por mais de 1 minuto quando outro usuários verificarem ele aparecerá com offline através desse comparativo de tempo.
respondida 31/05/15 às 5:24
ClebersonCleberson
Boa noite Kevin, cara eu já fiz isso em um dos meus primeiros projetos (uma rede social mobile) quando tinha 16 anos. A resposta é bem simples mesmo, cada vez que usuário logado fizer alguma interação com o site (trocando ou atualizando a própria página) você chama uma função ou método responsável por ir no banco e atualização algum campo de alguma tabela com data exata da interação. No seu script antes de chamar essa função você roda uma segunda função que verifica se na tabela que guarda os últimos acessos de cada usuário se o horário atual é X minutos maior que o último salvo na tabela caso positivo desloga o usuário, caso negativo atualiza a tabela usando a primeira função citada acima.
Na hora de mostrar para os outros usuários quem tá online é só você fazer um SELECT no banco listando todos os usuários que possuem o último acesso salvo em até os X minutos permitidos.
Dica: Pra deixar mais escalável, você pode criar uma terceira função que restringirá essas consultas/gravações no banco, salvando em cache os últimos acesso de cada usuário pra não ficar exigindo muito do banco. Isso só se você tiver um bom tráfego no seu site, do contrário pode usar só a solução simples que apontei.