Detectar inatividade do sistema em PHP


(Laísa Cardoso) #1

Olá, Boa tarde!

Eu preciso, detectar quanto tempo o usuário está sem mexer no sistema. Alguém sabe me dizer se é possível fazer isso PHP, pois por ser uma linguagem que roda no servidor acredito que o PHP sozinho não de para fazer.
Por que eu preciso que seja da seguinte maneira: o usuário parou de mexer do sistema e voltou depois de 30 minutos. Vou precisar registrar isso, entende.
Alguém tem alguma sugestão por favor.
Obrigada!


(Maykel Esser) #2

Acredito que somente com PHP não seja possível. Você pode registrar a última ação dele em algum log, e comparar depois. Ou usar alguma tecnologia como websockets/long-polling. Mas não sei se teria o resultado que vc desejasse.


(Luã Ciceri Schwertner) #3

Você pretende deslogar o usuário ou algo do tipo ? Se sim, tem como você fazer a sessão expirar após determinado tempo.


(alvaro marcelo kaim) #4

Também tenho a mesma duvida, gostaria de fazer um script de ver se o cara esta online no site, por exemplo o do facebook, caso o cara esteja logado e não ausente por um determinado tempo ele aparece como online, caso contrário é feito o logoff dele e dado como inativo.
por exemplo o usuario fecha ou muda a página para outro site e não tenha mais nenhuma aba do site aberta, ele é deslogado, ou caso passe uns 20 minutos sem ele ver qualquer pagina do site também é deslogado automáticamente.


(Luan Maik) #5

toda vez que o usuário executar algo no PHP, grave na sessão $_SESSION a data/hora da interação, assim será possível comparar a hora da nova interação com a anterior:

//Função que retorn o tempo ocioso em minutos
function tempo_ocioso($ultima_interacao)
{
            $dateNow   = new \DateTime(date('Y-m-d H:i'));
 
            $dateDiff = $ultima_interacao->diff($dateNow);
            return $dateDiff->i;
}

$tempoOcioso = tempo_ocioso($_SESSION['ultima_interacao']);

//Verifica se o tempo ocioso é maior que 30 minutos
if($tempoOcioso > 30){
       //Faz alguma coisa
}

//atualiza a ultima interação
$_SESSION['ultima_interacao'] = new \DateTime(date('Y-m-d H:i'));