Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Opa
Como posso saber quantas pessoas estão logadas no sistema, sem usar banco de dados.
Tem como saber quantas sessões estão abertas no servidor?
É possível utilizando session_id(). Faça um teste com o exemplo abaixo abrindo em mais de um browser.
<?php
session_id('TOTAL');
session_start();
if(!isset($_SESSION['USUARIOS_ONLINE']))
{
$_SESSION['USUARIOS_ONLINE'] = 1;
}
else
{
$_SESSION['USUARIOS_ONLINE'] += 1;
}
echo $_SESSION['USUARIOS_ONLINE'];
?>Interessante.
Vivendo e aprendendo. ;)
Percebi que ao atualizar a página no seu código ele adiciona +1 ... então não da pra usar pra usuários on-line, o melhor mesmo é usando banco de dados ;) ...
ou procure por contadores de usuarios online grátis do google, tem uns bem legais.
Esse exemplo não é para verificar usuários on-line, só para mostrar que se pode usar a mesma sessão para esse propósito.
Teria que fazer mais ou menos isso:
<?php
session_id('TOTAL');
session_start();
//
// faz as verificações, como validar, consulta em banco, etc...
//
// $user - objeto do usuário atual
//
if(!isset($_SESSION['USUARIOS_ONLINE']))
{
$_SESSION['USUARIOS_ONLINE'] = array($user->login);
} if(!in_array($user->login, $_SESSION['USUARIOS_ONLINE']))
{
$_SESSION['USUARIOS_ONLINE'][] = $user->login;
}
}
echo 'Número de usuários on-line:' . count($_SESSION['USUARIOS_ONLINE']);
?>
Isso é um exemplo bem simples.
Se abrisse em dois navegadores deveria aparecer 2 né?
apareceu 1 :huh:
abri em três e continua mostrando 1...
No caso do primeiro código postado, se abrir em mais de um navegador ou até mesmo em mais de uma aba de um mesmo navegador, já há o incremento do contador.
O segundo não testei, mas a princípio, só vai considerar mais de um se houver realmente mais de um usuário logado, já que é feita verificação de duplicidade antes de adicionar a informação.
Um sistema de autenticação bem resolvido não permitirá login simultâneo da mesma conta, seja em mais de um browser, seja em mais de uma aba.
Até onde eu sei, sem envolver nenhum tipo de banco de dados, SQL ou NoSQL, só seria possível manipulando informações de arquivo.
Mas numa sobrecarga de acessos simultâneos você pode ter desde perda de informações até corrompimento desse histórico.