Ir para conteúdo
Fórum Script Brasil
  • 0

Problemas Pra Gerar Relatório


Guest Eric Saboia

Pergunta

Guest Eric Saboia

Bom dia,

estou desenvolvendo um sistema que precisa de relatório de login-in / logout. Pois além de ser necessário gerar tal relatório para acompanhamento administrativo, é necessário barrar o acesso de um usuário caso outro já esteja logado com o mesmo login e senha.

Partindo para o desenvolvimento:

Tenho uma tabela no banco que registra horário de login / logout de cada usuário e uma coluna bit que informa se ele está logado ou não.

No momento do login, eu insiro no banco o horario de login e mudo a coluna "Logado" para 1.

Meu problema começa na hora do logout, pois o usuário pode fechar o browser sem clicar em "Deslogar do sistema", simplesmente fechando a janela...

Possíveis soluções:

1 - Através do evento window.onclose do JavaScript, detectar quando o usuário fechou o browser e rodar minha funcao que encerra o login. O problema é que quando o usuário aperta F5 ele também roda o window.onclose, modificando o status no banco e causando uma falha de segurança. Além disso o IE não se comportou de forma correta com o onclose (pra variar... essa b*** de IE).

2 - Rodar no meu servidor uma rotina que cheque se a session com o id do usuário ainda existe, caso não exista mais ele executa a função pra finalizar o login (inserir no banco e etc). O problema é que até onde eu sei não é possível enxergar uma Session de um computador externo ao que se criou a mesma, imaginei que isso seria até uma falha de segurança... mas como essa rotina seria executada no servidor PHP, talvez exista alguma forma de ler todas as sessions geradas por ele, porém não sei como fazer isso..

Se alguém souber como resolver o problema em alguma das 2 soluções, ou puder me indicar outra solução viável, eu agradeceria muito.

Obrigado pela atenção e paciência de ler tudo isso (hehe),

Eric Saboia.

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Uma solução seria você criar um arquivo e colocar ele no cron para controlar os logouts, tipo:

O usuário faz o login, na hora do login você descobre qual o id da sessão (com session_id), guarda o id e grava a data/hora, toda página que o usuário entrar você pega o id da sessão e atualiza a data/hora que está guardada no BD... enquanto isso um script fica rodando no cron lendo as informações guardadas nessa tabela que guarda o id da sessão e a data/hora, então quando o script encontrar um id que foi atualizado pela última vez em X (onde X é um lapso de tempo que você determinar) minutos você pode mandar ele apagar o id e modificar o status do login para 0... resumidamente, o que esse script do cron faz é detectar quem possivelmente fechou a janela sem fazer logout...

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Eric Saboia

Eu pensei em fazer exatamente isso que você está dizendo... só que essa solução tem dois problemas:

1- Sistema vai ficar pesado com tantos updates o tempo inteiro, já fiz o teste e a velocidade do servidor cai assustadoramente (esse sistema é muito grande).

2- Se o usuário passar mais do que o tempo que eu executo a cron sem entrar em nenhuma página, o status do login vai pra 0, mas a $_SESSION do usuário continuará ativa.

Baixei uns inscripts aqui que devem ter uma solução. Se conseguir coloco aqui. Obrigado.

Link para o comentário
Compartilhar em outros sites

  • 0

A possibilidade de alguém passar, por exemplo 30 minutos, sem mudar de janela é muito pequena, além disso, você pode fazer a verificação do status do cara na tabela, se for zero manda ele refazer o login. Quanto a velocidade, ai é particularidade do sistema que só você pra saber mesmo...

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Eric Saboia

além de tudo descobri agora que a merda da Locaweb só roda cron 2x por dia... não posso rodar de 30 em 30 mins.. :(

Não tem nenhum jeito de eu executar uma ação ao fechar o browser? me disseram que via ajax é possível...

Link para o comentário
Compartilhar em outros sites

  • 0

Em AJAX deve ter... mas eu não saco disso... o que você pode fazer é chamar uma página quando a janela do navegador for fechada e essa janela executar o logoff... para isso coloque no cabeçalho:

<script language="JavaScript" type="text/JavaScript">
<!--
function verificar()
{
    var acao=self.screenTop;
    if(acao > 9000)
    {
        window.open('pagina','target','descrição');
    }
    else
    {
        return;
    }
}//-->
</script>
E na tag body:
<body onunload="verificar();">

Ps.: Como é javascript o funcionamento ou não vai depender do navegador...

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Eric Saboia

Não funciona pois se o usuário bloquear popup já era.. Sem contar que acho que onunload também é ativado com F5 e etc..

Estou fazendo de outra maneira, mesmo assim, obrigado pela atenção.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...