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

19 respostas Resolvido
F

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

J

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.

F

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

Obrigada.
Flavia

F

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

J

Nesse caso faz essa configuração:

F

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

F

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

J

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.

F

Ok. Vou ver se acho algum exemplo.

Obrigada. Flavia

J

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.

F

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

J

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

F

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

Flavia

J

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

F

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

J

Nunca usei, se atende vai fundo.

F

Obrigada.

F

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

F
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