Estou precisando de uma ajuda de como seria a melhor forma para tratar Timeout em uma aplicação.
Pensei que o ideal seria tratar em um local só, tipo criar uma classe de Timeout e utilizir em uma tag (no método que precisar dar o timeout, chamar algo do tipo [Timeout]), andei buscando artigos mas ainda não tive uma solução. Alguém poderia me dar uma ideia.
Obrigada. Flavia
Na verdade acho que não fui clara. Não quero aumentar o tempo de timeout e sim dar timeout(expirar sessão) caso o usuário fique por um determinado tempo sem utilizar o sistema.
Esta configuração já faço. Vou explicar o que faço hoje e como estou querendo tratar.
No web.config coloco a seguinte configuração:
<sessionState timeout="1"></sessionState>
Para o Cadastro de Usuario Controller, por exemplo, envio um alerta dizendo que a sessão expirou e que o login deve ser efetuado novamente. Assim:
Usuario usuarioLogado = Utils.Utils.GetUsuarioLogado();
if (usuarioLogado == null)
{
message = new Message(EnumTypeMessage.NOTICE, ConstantsMessage.MESSAGE_ALERT_SESSION_TIMEOUT);
objMsgJson = new ObjetoMensagemJson("", message);
return Json(objMsgJson);
}
Sendo que esta mensagem só aparece quando o usuário retorna ao cadastro depois de um tempo inativo sem utilizar o sistema. Gostaria de algo automático, como por exemplo, abrir uma mensagem automaticamente depois do tempo de timeout informando que a sessão irá expirar em tantos segundos.
Achei um artigo:
Sendo que desta forma não achei prático para tratar em todo o sistema, pois tenho várias telas de cadastro, consulta de relatórios, etc. Teria alguma ideia?
Em um .js genérico contabilize o tempo que o usuário está após a última requisição ao backend, se o tempo se aproximar a x minutos voce exibe mensagem.
Isso é mais questao de lógica mesmo. Na inicialização da página e no ajaxStart (se tiver usando jquery), voce seta uma variável com a data e hora atual. De tempos em tempos (com setInterval do javascript) voce calcula diferença com data e hora atual, se a diferença for de x minutos você exibe a mensagem.
function alertSessionTimeout() {
var answer = confirm(" Sua sessão expira em 1 minuto.\n\n
Click ‘OK’ para extender sua sessão.\n
Click ‘Cancel’ para terminar sua sessão imediatamente.");
if (answer == true)
window.location = location.href;
else {
window.top.location = ‘~/AutenticacaoController/Logout’;
}
}
E estou tentando chamar este javascript no body da página, assim:
Isso, um .js separado que vai ser referenciado somente na sua master page/layout master (creio que voce ja tenha isso sendo usado por todas as páginas).
Estou utilizando o bootstrap-session-timeout. Já estou conseguindo exibir a mensagem, sendo que nesta mensagem tenho dois botões “Sair” ou "“Continuar Conectado”, quando tento intergir com estes botões a mensagem some. Ou seja, ela some assim que volto a interagir com o sistema.