Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá prezados bom dia.
Minha questão é a seguinte. Tenho um sistema de login que utilizo no meu portal de notícias que quando o usuário loga no sistema a sessão inicia e guarda o nome e mais alguns dados dele.
E eu imprimo o nome de quem logou assim
Olá
<?php echo $_SESSION[nomeuser]; ?>
seja bem vindo.
até ai tudo certo, sempre que alguém loga mostra o nome de quem logou.
Mas como mostrar os usuário que estão online no sistema?
ex. joão logou no sistema em seu pc e maria tb. mas como ambos vão saber que estão online. entendeu?
Desde já agradeço a ajuda.
Exatamente como o macielcr7 disse.
Defina um tempo de espera para definir o usuário como "offline" (exemplo: 5 minutos).
Colunas da tabela "online":
Área de login:
mysql_query("DELETE FROM online WHERE usuario='$_SESSION[nomeuser]'"); // por segurança, caso o usuário tenha esquecido de fazer logout
mysql_query("INSERT INTO online VALUES ('$_SESSION[nomeuser]', '".time()."', 'n')");
Todas as áreas (ou em um arquivo obtido via include em todos os outros acessados pelo usuário:
mysql_query("UPDATE online SET lastact='".time()."' WHERE usuario='$_SESSION[nomeuser]'");
Logout:
mysql_query("DELETE FROM online WHERE usuario='$_SESSION[nomeuser]'");
Mostrando usuários on-line:
$tempo = strtotime("-5 minutes"); // 5 minutos atrás
// por segurança, caso algum usuário tenha esquecido de fazer logout:
mysql_query("DELETE FROM online WHERE lastact<$tempo");
$qry = mysql_query("SELECT * FROM online WHERE lastact>$tempo"); $onlineusers = array();
while($row = mysql_fetch_array($qry)) {
$onlineusers[] = $row['usuario'];
}
echo implode("<br />", $onlineusers); // para não ficar um espaço acima ou abaixo, inútil mysql_query("INSERT INTO online VALUES ('$_SESSION[nomeuser]', '".time()."', 'n')");
// o usuário ficou 5 minutos parado e o sistema o definiu como off-line. então, tenho que recolocá-lo na lista
echo $_SESSION['nomeuser'];
}>
Exatamente como o macielcr7 disse.
Defina um tempo de espera para definir o usuário como "offline" (exemplo: 5 minutos).
Colunas da tabela "online":
Área de login:
mysql_query("DELETE FROM online WHERE usuario='$_SESSION[nomeuser]'"); // por segurança, caso o usuário tenha esquecido de fazer logout
mysql_query("INSERT INTO online VALUES ('$_SESSION[nomeuser]', '".time()."', 'n')");
Todas as áreas (ou em um arquivo obtido via include em todos os outros acessados pelo usuário:
mysql_query("UPDATE online SET lastact='".time()."' WHERE usuario='$_SESSION[nomeuser]'");
Logout:
mysql_query("DELETE FROM online WHERE usuario='$_SESSION[nomeuser]'");
Mostrando usuários on-line:
$tempo = strtotime("-5 minutes"); // 5 minutos atrás
// por segurança, caso algum usuário tenha esquecido de fazer logout:
mysql_query("DELETE FROM online WHERE lastact<$tempo");
$qry = mysql_query("SELECT * FROM online WHERE lastact>$tempo"); $onlineusers = array();
while($row = mysql_fetch_array($qry)) {
$onlineusers[] = $row['usuario'];
}
echo implode("<br />", $onlineusers); // para não ficar um espaço acima ou abaixo, inútil mysql_query("INSERT INTO online VALUES ('$_SESSION[nomeuser]', '".time()."', 'n')");
// o usuário ficou 5 minutos parado e o sistema o definiu como off-line. então, tenho que recolocá-lo na lista
echo $_SESSION['nomeuser'];
}
Olá Jefrey tudo bem. tentei fazer do geito que você me passou, mas acho que fiz algo errado. Olha só
Quando o usuário faz login ele acessa a página (administracao_2-0.php) e foi nela que coloquei seu código desta forma
<?php
mysql_query("DELETE FROM online WHERE usuario='$_SESSION[nomeuser]'"); // por segurança, caso o usuário tenha esquecido de fazer logout
mysql_query("INSERT INTO online VALUES ('$_SESSION[nomeuser]', '".time()."', 'n')");
?>
<?php
mysql_query("UPDATE online SET lastact='".time()."' WHERE usuario='$_SESSION[nomeuser]'");
?>
<?php
mysql_query("DELETE FROM online WHERE usuario='$_SESSION[nomeuser]'");
?>
<?php
$tempo = strtotime("-5 minutes"); // 5 minutos atrás
// por segurança, caso algum usuário tenha esquecido de fazer logout:
mysql_query("DELETE FROM online WHERE lastact<$tempo");
$qry = mysql_query("SELECT * FROM online WHERE lastact>$tempo"); $onlineusers = array();
while($row = mysql_fetch_array($qry)) {
$onlineusers[] = $row['usuario'];
}
echo implode("<br />", $onlineusers); // para não ficar um espaço acima ou abaixo, inútil mysql_query("INSERT INTO online VALUES ('$_SESSION[nomeuser]', '".time()."', 'n')");
// o usuário ficou 5 minutos parado e o sistema o definiu como off-line. então, tenho que recolocá-lo na lista
echo $_SESSION['nomeuser'];
}
?>
Mas ele mostra somente quem ta logado na sessão
EX;
entrei em um computador com o login JOÃO
e entrei em outro computador com o ligin MARIA
Mas no pc de joão só mostra ele mesmo e no de maria também. o certo seria no pc de joão mostrar
JOÃO
MARIA
NA TABELA FIZ ASSIM:
tabela
online
campos
id - int
usuario - varchar - 255
lastact - varchar - 255
porém quando alguém loga ele só armazena uma linha de valores assim:
id = 10
usuario =
1332107342
lastact = n
e o campo id muda constantemente.
Será que fiz algo errado?
Simples, quando um usuario logar você grava no banco, que ele está ONLINE.
e de vez em quando verificar se o usuario está logado, aii faz uma SELECT trazendo quem está logado... :thumbsup: