Jump to content
Sign in to follow this  
rjsma

Status do utilizador

Recommended Posts

rjsma

Viva malta,

O que me traz hoje é o seguinte, gostava de saber como posso fazer que os restantes utilizadores registados podem ver o status de um utilizador. Do tipo da pap, nos topicos quando um user faz um post no lado esquerdo aparece o nome de utilizador, a imagem e o status(online e offline).Estava a pensar em usar duas imagens, 1 para quando estivesse online e outra para quando estivesse offline(bolinha verde e branca).

Também gostava de receber uma dica para que possar conta o nr. total de tempo online de um utilizador.

Abraços rapaziada

Share this post


Link to post
Share on other sites
Lfscoutinho

Boas,

Existem várias formas. Uma delas é criares um campo timestamp e a cada clique que o utilizador faça, actualizas o campo timestamp. Depois, basta verificares se o último clique foi por exemplo há menos de 5, 10, 30 minutos.. O tempo que quiseres...

Share this post


Link to post
Share on other sites
rjsma

Na tabela utilizadores criei um campo do tipo datetime porque timestap tem uma limitacao(só vai ate ao ano 2038).

Depois criei um ficheiro javascript que faz uma actualização da página de 10 em 10 seg.


setInterval("actualiza()", 600000); 

function actualiza() {
  $.post("actualiza.php");
}

Depois no ficheiro actualiza.php tenho o seguinte:

$utilizador= $_SESSION["utilizador"];

if ($_SESSION["utilizador"]) {
  $online = mysql_query("UPDATE utilizadores set status_online=NOW() where utilizador='$utilizador'");
}  
?>

Agora o que não estou a conseguir verificar se o utilizador está inactivo por 15 minutos.Se estiver atribui o estado offline se estiver atribui o estato online.

Cumprimentos

Share this post


Link to post
Share on other sites
Lfscoutinho

Boas,

Ahaha, desculpa mas não me consegui conter  :cheesygrin:

Essa do "só vai até ao ano de 2038" partiu-me todo lol !

Depois, 10 em 10 segundos !? Para quê isso !? Normalmente usa-se de 5 em 5 ou 10 em 10 minutos... 10 segundos é um exagero... Mas claro... depende da aplicação.

Para verificares, podes fazer uma consulta em que adicionas os 5 ou 10 minutos (à data e hora do último clique) e verificas se é maior que a data e hora actual. Se for, está activo. Caso contrário, offline.

Share this post


Link to post
Share on other sites
yoda

Com ajax, nada. A sessão tem tempo de vida, guarda o timestamp da ultima acção do user no site e calculas com a validade da sessão se o user está online ou não. Não é nem perto de 100% eficaz, mas é bem melhor que sobrecarregar a máquina com algo que nem é assim tão importante.

Share this post


Link to post
Share on other sites
rjsma

Então como guardo o timestamp da ultima accao do user sem javascript. Fazer um update a todos links e submits  😲? Assim nunca mais saia daqui ao fazer desta maneira.


$utilizador= $_SESSION["utilizador"];

if ($_SESSION["utilizador"]) {
  $online = mysql_query("UPDATE utilizadores set status_online=NOW() where utilizador='$utilizador'");
}  

Share this post


Link to post
Share on other sites
rjsma

Sim, mas primeiro gostava de saber se havia uma solução mais rapida. Como deves saber, fazer um update a todos os links e submits nunca mais saia daqui. Mas em ultimo caso terá que ser.

Share this post


Link to post
Share on other sites
Lfscoutinho

Boas,

Primeiro, a maioria dos sites trabalha em função de uma página. Segundo, se não for esse o teu caso, então crias uma função que faz isso e basta incluires o ficheiro. Para tudo é preciso trabalho :D

Share this post


Link to post
Share on other sites
yoda

Sim, mas primeiro gostava de saber se havia uma solução mais rapida. Como deves saber, fazer um update a todos os links e submits nunca mais saia daqui. Mas em ultimo caso terá que ser.

Basta que haja uma acção no site para haver uma actualização do timestamp. Uma função genérica para isso chega, não dá muito trabalho .. torna é o site / servidor mais lento.

Share this post


Link to post
Share on other sites
rjsma

Pronto então fica assim, criei um ficheiro php a parte com um update:


<?php 

$utilizador= $_SESSION["utilizador"];

if ($_SESSION["utilizador"]) {
  $online = mysql_query("UPDATE utilizadores set status_online=NOW() where utilizador='$utilizador'");
}  
?>

E agora em todos os submits e links(<a>) fazo um include do ficheiro. Na bd em vez de usar timestamp estou a usar datetime.

Agora para ver se esta online ou offline tenho de aumentar 15 minutos do tempo que esta guardado na bd e comparar as 2 data, resumindo 2 variaveis 1 com a data que esta na bd e outra com 15 minutos de avanço, e depois é so usar o if para camparar as datas.

para aumentar o tempo penso que seja assim:


strtotime("+15 minute",$data);

Não sei se funciona com datetime.

Ainda não experimentei nada mas gostava de saber se estou a pensar e a fazer as coisas correctamente.

Cumprimentos

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.