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

Relatório De Usuários Logados


cwbs

Pergunta

Colegas,

Uso o seguinte esquema para controlar os usuários que logam no site que desenvolvi:

1) Tenho a tabela 'tabLog' com os campos 'IdSessao', 'Nome', 'DataLogin', 'HoraLogin', 'DataLogout', 'HoraLogout';

2) No momento do LOGIN, crio um ID aleatório (não quero usar o ID da Session) e gravo esse Id (campo 'IdSessao') mais o nome do usuário (campo 'Nome'), a data de login (campo 'DataLogin') e a hora de login (campo 'HoraLogin').

Os valores do ID aleatório e do nome do usuário eu jogo tudo em variáveis Session, para usar depois.

3) Se o usuário sair da área restrita (clicando em outro link que não seja restrito, por exemplo), disparo uma rotina de logout gravando a data de logout (campo 'DataLogout') e a hora de logout (campo 'HoraLogout') para o nome do usuário e seu ID aleatório.

4) Se o usuário fechar o browser, o evento 'onunload' (que nesse caso coloquei no 'frameset') dispara um javascript que por sua vez chama a mesma rotina de logout, através de uma janela onde eu só coloco tipo "obrigado pela sua visita" e mais o logo da empresa (a janela só serve pra rodar o script).

Tudo funciona perfeitamente, isso se o usuário logar, navegar e sair ANTES DA SESSÃO EXPIRAR!!!

ESSE é o PRB!!!

Se a sessão expira, eu não consigo gravar o logout! Já tentei colocar rotina no evento Session_OnEnd do global.asa e não funciona!!!

No momento, estou usando um truque para, quando eu abro o relatório de acessos, eu gravo "expirado" nos campos de logout de usuários que tenham logado há mais de um dia (estou calculando que niguém "normal" ficaria mais de 24 horas no mesmo site, só se o cara morrer na frente do micro...), mas eu não quero continuar usando esse truque.

Alguém tem alguma idéia, sobre como gravar o logout se a sessão expirar???

Thank you all!!!

cwbs

Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0

A idéia que eu ia dar era de usar session_onend, mas tu já disse que não funciona, então não sei como te ajudar... Vou dar uma pesquisada porque fiquei curioso de saber como fazer , se achar alguma coisa, te aviso...

Link para o comentário
Compartilhar em outros sites

  • 0

Colega,

Isso eu não posso fazer, pois no servidor onde o site está hospedado existe um limite para o máximo de 10 usuários conectados ao banco de dados. Isso serve pra evitar sobrecarga no servidor.

Tem gente que loga no sistema, vai no banheiro, sai pra tomar um cafezinho e esquece da vida... Imagine 10 caras logando no sistema e fazendo exatamente isso? Por isso eu configurei um máximo de 10 minutos pra sessão expirar.

mesmo assim valeu...

cwbs

Link para o comentário
Compartilhar em outros sites

  • 0

Quando tu usa variáveis passadas pelo Session, se a sessão vencer todo o funcionamento do site pode ficar comprometido... Assim eu te recomendo a quando der 9 minutos de inatividade, chamar uma página que grava o logout e encerra a sessão na marra, (pois ao chamar essa página o sistema começaria a contar novamente até dez minutos).

Tu ainda pode passar estas variaveis pelo link e não pelo Session, daí se a sessão vence tu não perde as variaveis mas, como disse, pode perder outras coisas....

Abraços

Lucky

Link para o comentário
Compartilhar em outros sites

  • 0

Colega,

A idéia é justamente essa: ao expirar a sessão, o usuário precisa efetuar login novamente.

E o prb é justamente esse: quando a sessão expira, o evento Session_OnEnd não está chamando o script para deslogar o usuário.

Se você ler a minha primeira msg, vai ver que o meu procedimento está correto. O que eu preciso é exatamente descobrir uma maneira de rodar o script para deslogar quando a sessão atingir o timeout, o resto eu já fiz, inclusive deslogar quando fechar o browser.

Pela lógica, e pelo que a Microsoft oferece, deveria ser no Session_OnEnd do global.asa, mas não quer funcionar assim.

Alguma idéia?

cwbs

Link para o comentário
Compartilhar em outros sites

  • 0

:ph34r: Mano,

quando eu quero verificar se uma sessao expirou eu utilizo um If End IF para tal.

Talvez você já tenha feito isso, mas se não fez, fica ai o toque.

If Session("nome da sessao") = False then

Response.Redirect("pagina de login.asp")

End if

Coloque esse codigo nas paginas que o usuario precisa estar logado para navegar.

Uma vez eu tentei isso no global tb e não funcionou igual so seu caso tb.

Bem, de qqer forma, se não funcionar, dá o toque ai.

Link para o comentário
Compartilhar em outros sites

  • 0

Isso eu faço em todas as páginas, afinal eu não quero que ninguém tenha acesso sem estar logado.

Se a sessão expirou, e o usuário clica em um link para o qual ele precisa estar logado (em outras palavras: If Not Session("Logado") = 'OK' Then), ele é redirecionado para a página de login.

O prb é outro: Imagine o seguinte cenário:

1) Usuário loga no sistema. Session iniciada.

2) Usuário executa algumas tarefas. Session em andamento. Tudo OK.

3) Usuário sai pra almoçar e esquece o sistema logado. Session inativa. Timeout em andamento.

4) Usuário come igual à um elefante e vai ficar umas 2 horas almoçando. Session inativa. Timeout em andamento.

5) Timeout da sessão (10 minutos) é atingido: evento Session_OnEnd() é (teoricamente) disparado.

6) Script para deslogar, colocado no Session_OnEnd(), deveria ser chamado nesse momento, mas NÃO é chamado.

Tudo bem que a Session acabou, as variáveis foram zeradas, e qualquer um que cair naquele 'If... End If' vai ser redirecionado, etc. etc. mas... e o meu relatório?

A única coisa que grava no banco de dados, no meu relatório ('a que horas o usuário logou, 'a que horas deslogou, quanto tempo ficou, etc.) é o script que eu preciso rodar, que é o mesmo que roda quando o usuário fecha o browser.

Meu prb é: como vou rodar meu script quando a sessão expirar, já que o Session_OnEnd não funciona?

O Response.Redirect no Session_OnEnd() não tá funcionando. Troquei tudo e coloquei a rotina inteira para deslogar no Session_OnEnd(). Tb não funcionou.

Existe alguma maneira, ou a Microsoft mais uma vez "me deixou na mão" com essa m%$#@ de ASP?

Ou será que existe alguma coisa no servidor que está impedindo o global.asa de dispara os eventos normalmente? Os outros eventos (Session_OnStart(), etc...) funcionam normal...

Já estou quase aceitando o fato de que não tem jeito mesmo...

Alguma idéia?

cwbs

Link para o comentário
Compartilhar em outros sites

  • 0

Tá bom, tá bom, eu sei que muitos usuários não os aceitam, mas você já pensou em usar os famosos "cookies"? Mas não sozinhos, só como um complemento, tipo tudo q ele salvar nas sessions salvar tb no cookie? assim qd a session expirar os outros dados estarão lá, mas não se esqueça de definir um tempo limite, tipo 2 a 3 horas, acho que aquele usuário que come feito elefante já deve ter voltado antes disso...

Espero ter ajudado.

Valeu

Link para o comentário
Compartilhar em outros sites

  • 0

Ai ai ai...

Acho que eu errei em tentar explicar demais... Vamos zerar tudo... vou explicar de novo:

Meu prb não é salvar valores de variáveis, isso eu posso fazer com cookies, com arquivos txt usando FSO, em banco de dados, etc...

1) O QUE EU QUERO:

Rodar o script para atualizar os dados da tabela para o meu relatório de usuários LOGADOS/DESLOGADOS quando a sessão for encerrada, ou seja, quando a sessão der Timeout (que no meu caso é 10 minutos);

2) O QUE JÁ FIZ:

- Rodar este script quando fechar o browser;

- Rodar este script quando clicar em outro link, por exemplo, "Clique aqui para deslogar".

Esse script vai registrar a saída do usuário na tabela do banco de dados e dar um Session.Abandon() e zerar todas as variáveis Session(). Isso tá OK, é isso mesmo que eu quero, e tá funcionando beleza.

3) O QUE JÁ SEI:

- Evento Session_OnEnd() no global.asa não está chamando esse script.

- Response.Redirect para o script não está funcionando no Session_OnEnd() do global.asa

4) QUAL É O PRB?

- Se o usuário LOGA e esquece o browser ligado e vai embora pra casa, a sessão expira e não dispara o script que grava na minha tabela que vai me gerar o relatório de usuários LOGADOS/DESLOGADOS.

5) RESULTADO DE TUDO ISSO:

- Usuário LOGA, TRABALHA e fecha o browser: BELEZA!! Gravou na tabela que ele deslogou!!

- Usuário LOGA, TRABALHA e clica em outro link: BELEZA TB!! Gravou na tabela que ele deslogou!!

- USUARIO LOGA, TRABALHA, mas não fecha o browser e nem clica em outro link. PROBLEMA: SESSÃO EXPIRA E EU FICO COM MEU RELATÓRIO FALTANDO A DATA E A HORA QUE ELE DESLOGOU!!

Acho que agora tá explicado.... :D :o <_< :( :unsure: :blink: :) :huh:

cwbs

Link para o comentário
Compartilhar em outros sites

  • 0

Colega,

Foi como eu já expliquei, é um script que grava numa tabela do banco de dados (com ADO) a data e hora em que o usuário está saindo da área restrita, seja pelo fechamento do browser ou seja pelo clicar em outro link da página que não seja restrito.

No caso do fechamento do browser, estou usando o evento 'onunload' dentro do 'frameset':

<frameset onunload='java script:efetuarlogout()' cols="195,*" frameborder="0" border="no" framespacing="0">

A rotina 'efetuarlogout()' abre uma janela com os dizeres "obrigado pela sua visita, etc... etc...", mas que só serve para executar o script que vai gravar a saída do usuário no banco de dados.

Vi seu exemplo, mas você tá usando um reload 'a cada 60 segundos. eu já tinha pensado em fazer isso, mas vou ter que escolher uma área do frame para dar o reload e rodar o script de atualização no banco de dados...

Vou experimentar assim e qualquer coisa eu posto aqui, valeu mesmo!

cwbs

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.1k
    • Posts
      651.8k
×
×
  • Criar Novo...