Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

João Paulo Belentani

Status: Online Offline

Recommended Posts

tenho um sistema de usuarios cadastrados e preciso de uma ideia (nao o script) de como fazer com php exibir para mim (que sou adm) na lista usuarios cadastrados quando eles estao online. pensei em session, mas nao consigo ter ideia de como me exibir!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode fazer um sistema de inatividade, a cada pagina que ele entrar/carregar, ação que ele realizar seta a atividade para verdadeiro, depois de um tempo sem atividade seta para falso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode fazer um sistema de inatividade, a cada pagina que ele entrar/carregar, ação que ele realizar seta a atividade para verdadeiro, depois de um tempo sem atividade seta para falso.

 

se a página dele for bastante acessada. Essa lógica poderia gerar algum problema?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cria uma tabela...

 

Coloca numa pagina principal (geralmente header) uma função que cadastra o IP, a hora, e o login do usuario.

 

E faz uma verificação, se a hora for menor do que tum tempo tu exclui esse usuario online, assim todo usuario que entrar vai fazer a verificação excluindo os usuarios inativos.

 

Depois só contar quantos registros tem na tabela.

 

Simples :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

se a página dele for bastante acessada. Essa lógica poderia gerar algum problema?

acho que não, tipo cada atividade será individual então isso é apenas para saber se o cara está no site.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A idéia por trás desse recurso é registrar num banco no mínimo IP do usuário e o timestamp de acesso.

 

Cada página acessada insere uma nova entrada e na hora de listar as informações, você condiciona o timestamp com o valor atual acrescido de alguma medida de tempo que queira (+10 minutos, +1 hora...). Isso nos moldes SQL, óbvio.

 

Se o sistema tiver um conceito de nomes de usuário, uma chave etsrangeira para a tabela de usuários é bem viável aqui, para que com uma JOIN você mostre o nome do usuário e não seu IP.

 

O problema aqui é o 'lixo", ou seja, informações muito antigas que são mantidas no banco. Algumas implementações consultam o banco antes de cada INSERT efetuando a remoção dos registros antigos.

 

Mas isso é extremamente nocivo à saúde da aplicação pois é uma nova query sendo executada em conjunto com diversas outras rotinas PHP para ler e operar o recurso. Para poucos usuários simultâneos, isso não é nada, mas um site espera atrair tantos visitantes quanto possível.

 

Ao invés disso, o melhor a se fazer é efetuar um TRUNCATE nessa tabela todo dia meia-noite, caso o site tenha muitos acessos diários ou uma vez por semana ou por mês caso contrário.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sei disso, mas além de dar uma explicação mais completa, cobri a nocividade que pode ser fazer o garbage collect desse modo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenho um site em que fiz esse sistema e para verificar se o usuário estava Online ou Offline era mandados um post a acada dois segundos por javascript para uma pagina que alterava um campo do tipo datetime no banco do dados assim para listar os contatos online era só selecionar os contatos em que este campo não era atualizado a mais de 2 segundos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenho um site em que fiz esse sistema e para verificar se o usuário estava Online ou Offline era mandados um post a acada dois segundos por javascript para uma pagina que alterava um campo do tipo datetime no banco do dados assim para listar os contatos online era só selecionar os contatos em que este campo não era atualizado a mais de 2 segundos.

faço a mesma coisa :D

 

ID | Usuario | UltimoAcesso | Online

 

A cada x Minutos ou quando o usuario acessar uma pagina seu timestamp da coluna UltimoAcesso será mudada, para fazer um site mais movido por usuario do que cron jobs, (afinal não precisamos executar e esquentar a CPU a cada 5 minutos em plena meia noite onde não há mitos online) você coloca que a cada acesso de um usuario ao perfil de outro ou quando vc listar os status seja executada uma função que checa se o timestamp ja passou do limite. se passou Online = Não, caso contrario Online = sim

 

// Função de um chat que desenvolvi a um tempo atras..
function delOld() {
	$db = $this->conn();
	$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
		
	$timeLimit = time()-180; // 3 minutes
	$sql = "DELETE FROM users WHERE `LastSend` < '$timeLimit'";
	$db->query($sql);
}

// Adaptação:
function setStatus() {
	$db = $this->conn();
	$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
		
	$timeLimit = time()-180; // 3 minutos
	$sql = "UPDATE usuario SET `Online`=falso WHERE `UltimoAcesso` < '$timeLimit'";
	$db->query($sql);
}

 

assim, a cada request dos usuario que requeira saber o status do usuario vc roda a função setStatus e Voila!

 

Espero ter ajudado ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.