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

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

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

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.

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

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.

Obrigada.
Flavia

Nesse caso faz essa configuração:

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

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

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.

Ok. Vou ver se acho algum exemplo.

Obrigada. Flavia

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.

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

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

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

Flavia

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

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

Nunca usei, se atende vai fundo.

Obrigada.

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

Bom dia.

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