Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala pessoal, preciso de um sistema que eu consiga depois extrair o tempo que o usuário ficou online, eu atualmente registro ações do usuário mas nada diz a hora que ele saiu, pois não consigo identificar quando o usuário fecha o sistema... Logo o registro de ação fica assim.
id | userId | action | regTime
----------------------------------------------------
1 | 12 | Login | 2016/03/01 13:33:09
2 | 12 | Painel | 2016/03/01 16:21:19
3 | 12 | usuário | 2016/03/01 23:13:02
Alguém pode me dar uma luz, uma forma melhor de fazer isso...??
Quando fiz isso pensei em juntar o tempo entre ações do usuário considerando a saída na ultima ação do dia, mas assim o cara faz quantas horas ele quiser no sistema, então pensei algo tipo de banco que fica dando um coutdown, mas que também identificasse quando ele fecha a aba ou o navegador, o beforeonload pega qualquer mudança de pagina.
Exato... esses eventos de Javascript também consideram um simples clique em um link. Por isso quase não são usados
Se você precisa do momento exato da saída, terá de "impor" que o usuário saia do sistema. Pode fazer isso com o countdown que você comentou. Isso força o usuário a "mostrar que está vivo".
Outra coisa que me veio à mente agora: até daria pra usar onUnload, mas o sistema deveria ser single-page, com tudo via Ajax. Isso é relativamente fácil de fazer usando o AngularJS, que tem um módulo para criar rotas direto no Javascript
Removido code
Não existe um jeito 100% confiável.
Considere um timeout de X minutos.
Compare a hora da última ação do usuário com a hora atual. Se for maior que X minutos, considere o usuário como offline