Tratar Timeout tanto no frontEnd( JavaScript) quanto no backEnd(C#)

19 respostas Resolvido
Flavia1

Bom dia.

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

19 Respostas

F

Boa Tarde Amigo,

No Back End se for micro serviço coloca essa configuracao no api gateway pois nele vc trata o timeout e retentativa da chamada do ms.

Ja no front valida o tempo de sessao de http e pronto hehe.

abs

Att,
Fernando Oliveira

javaflex

Como nao especificou qual tecnologia web está usando com C# segue exemplo com asp.net core https://medium.com/aspnetcore/increase-the-timeout-of-asp-net-core-application-9a7b4f6deebf ou pesquise similar se for outra coisa. No front basta tratar o erro que vem do back-end.

Flavia1

Agradeço. Vou dar uma pesquisada pois utilizo o Net Framework 4.5.2.

Obrigada.
Flavia

Flavia1

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.

Obrigada.
Flavia

javaflex

Nesse caso faz essa configuração:

Flavia1

Bom dia Fernando.

Neste caso não sei o que chama de micro serviço. Meu projeto é desenvolvido com Net Framework 4.5.2, JavaScript(Ajax) e C#.

Obrigada.
Flavia

Flavia1

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?

Obrigada.
Flavia

javaflex

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.

Flavia1

Ok. Vou ver se acho algum exemplo.

Obrigada. Flavia

javaflex

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.

Flavia1

Tentei assim:

function sessionTimeout(n) {

setTimeout(alertSessionTimeout(), (n - 1) * 60 * 1000);

}
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:

<body onload="sessionTimeout(<%=session.Timeout %>)">

Mas nada acontece.

Obrigada.
Flávia

javaflex

Um exemplo: https://jsfiddle.net/56asr7qc/

Flavia1

Obrigada. Neste caso tenho que fazer um arquivo .js separado e utilizá- lo em todas as telas?

Flavia

javaflex

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).

Flavia1

Achei um plugin jquery chamado timeout dialog. Talvez possa resolver este problema. Já utilizou?

javaflex

Nunca usei, se atende vai fundo.

Flavia1

Obrigada.

Flavia1

Bom dia.

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.

Fiz da seguinte forma:

Baixei : bootstrap-session-timeout.js bootstrap-session-timeout.min.js

Na classe BundleConfig do meu projeto inclui estes plugins: “/Scripts/bootstrap-session-timeout.js”, “/Scripts/bootstrap-session-timeout.min.js”

Depois na minha página fiz a chamada assim:

$.sessionTimeout({ title:‘Sessão Expirada!’, message: ‘Sua sessão será expirada.’, warnAfter: 10000, });

A mensagem aparece depois do tempo especificado mas não consigo manipular os botões pois ao interagir novamente a mensagem some. Alguém já utilizou?

Obrigada. Flávia

Flavia1
Solucao aceita

Bom dia.

Consegui resolver. Utilizei o plugin bootstrap session timeout.
Obrigada a todos.

Criado 13 de agosto de 2019
Ultima resposta 3 de set. de 2019
Respostas 19
Participantes 3