Como posso verificar para certificar-se uma janela está sendo usado ativamente, e se não alertar o usuário final que eles estão prestes a ser desconectado?

StackOverflow https://stackoverflow.com/questions/105147

  •  01-07-2019
  •  | 
  •  

Pergunta

trabalhando em um novo sistema de back-end para a minha empresa, e um dos seus pedidos é para uma janela para tornar-se bloqueado para baixo e para o usuário para ser enviado para a tela de login, se deixá-lo inativo por muito tempo.

Eu acho que eu faria isso com JavaScript, anexando ouvintes para cliques, movimentos do mouse e chave-ups, mas eu me preocupo com mexer com outros scripts.

Todas as sugestões?

Foi útil?

Solução

Em primeiro lugar, para que isso seja eficaz, você tem que garantir que os usuários estejam desconectados do servidor no final deste tempo ocioso. Caso contrário, nada que fazer no lado do cliente é eficaz. Se você enviá-los para uma página de login, eles podem simplesmente clicar no botão de volta.

Em segundo lugar, a maneira convencional de fazer isso é usar um tag "meta refresh". Adicionando este para a página:

<meta http-equiv="refresh" content="900;url=http://example.com/login"/>

irá enviá-los para a página de login após 15 minutos (900 segundos). Isto irá enviá-los lá mesmo se eles estão fazendo algo na página. Ele não detecta atividade. Ele só sabe quanto tempo a página foi para cima no navegador. Isso geralmente é bom o suficiente, porque as pessoas não levam 15 minutos para preencher uma página (stackoverflow.com é uma notável exceção, eu acho.)

Se você realmente precisa para detectar a atividade na página, então eu acho que seu primeiro instinto é correto. Você vai ter que adicionar manipuladores de eventos para várias coisas. Se você está preocupado com a brincar com outros scripts para validação ou outras coisas, você deve olhar para a adição de manipuladores de eventos programaticamente em vez de em linha. Ou seja, em vez de usar

<input type="text" onClick="doSomething;">

Acesse o modelo de objeto diretamente com

Mozilla way:   element.addEventListener('click' ...)
Microsoft way: element.attachEvent('onclick' ...) 

e, em seguida, certifique-se de repassar os acontecimentos depois de recebê-los código de modo existente ainda faz tudo o que (validação?) Que é suposto fazer.

http://www.quirksmode.org/js/introevents.html tem uma gravação decente se sobre como fazer isso.

-
BMB

Outras dicas

Você pode apenas fazê-lo fazer um log out se o usuário não muda páginas depois de tanto tempo. Isso é o que o sistema Anjo Aprendizagem Courseware parece fazer.

O outro problema que você vai enfrentar, porém, é que alguns usuários desativar o JavaScript.

Se você pode colocar o código na página, em seguida, há duas coisas:

  • Javascript procurando o movimento do mouse, a atividade do teclado, e rolagem.
  • Coloque uma etiqueta meta refresh no html -. Se eles estão nessa página há mais de X minutos ele vai redirecionar automaticamente para a página de login

Se você só pode colocar o código no servidor:

  • Mantenha uma sessão (cookie ou outro) que rastreia o tempo entre as mudanças de página. Se uma página é solicitada mais de X minutos desde o último pedido, não servem a página solicitada, servir a página de login.

Você pode usar as técnicas de servidores de atualização meta e em conjunto. A página atualizada vai para um "sua sessão está prestes a expirar, clique aqui para voltar e continuar a trabalhar dentro de 30 segundos".

O botão eles clique redefine a sessão do seu servidor, e executa uma função de página de volta para que todos os dados que tinha (na maioria dos navegadores) ainda estará lá. Requer JavaScript na página de atualização, mas nenhum na página original - apenas uma atualização meta. rastreamento de atividade Javascript seria a melhor embora.

-Adam

No caso de carga para a página que você pode usar setTimeout para disparar uma função avisando o usuário que será desconectado se não atualizar a página.

Com 5 minutos de tempo limite de sessão que você poderia fazer advertências após 4 minutos:

setTimeout(timeoutWarning, 240000);

function timeoutWarning() {
  if(confirm('You have been idle for a while.  Would you like to remain logged in?'))
    window.location.refresh();
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top