Inquiridor
Expirar (condicional) mediante inatividade

Pergunta
-
Prezados colegas,
Eu vi um exemplo interessante para controlar tempo de uma forma decrescente neste post:
http://social.msdn.microsoft.com/Forums/pt-BR/e30c37dd-4cfe-4af7-9149-e2095e922f57/relogio-que-mostra-o-tempo-para-expirar?forum=aspnetpt
E com esse código eu pensei em só fazer um condicional de quando este tempo chegasse em 0 e então dar um redict para a página inicial para o usuário logar novamente (esta seria uma forma boa de tratar a expiração sem ter que lidar com web config ou outras formas). Ainda não fiz o código na prática, mas na teoria é bem simples e funcionaria.
Mas o problema é que o sistema que tenho aqui é com masterpage, ou seja, tenho uma página mãe geral, e chamo diversos módulos dentro de um iframe deste masterpage.
Eu iria colocar o contador dentro da masterpage. e depois de 30 minutos o usuário seria redirecionado para a página inicial para logar novamente - porém eu gostaria que a cada click do usuário na página filha dentro do iframe, proporcionasse um refresh no cronometro decrescente da masterpage.
Ou seja, o cronometro deve ser 30 minutos de inatividade em qualquer parte do sistema.
Alguém tem alguma sugestão ou algum exemplo bom de como fazer isso?
desde já obrigado.
Todas as Respostas
-
Boa tarde Angelo,
Bom o que você pode fazer, é usar um contador regresivo feito com JavaScript, alimentar um hiddenField com a hora do banco de dados e depois recuperar com JavaScript, como se fosse a data final, segue um exemplo abaixo, só adaptar:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication_CSS._Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <script src="http://prototypejs.org/assets/2009/8/31/prototype.js" type="text/javascript"></script> <script type="text/javascript" language="javascript"> //Data 25/09/2011 16:50:00 var YY = 2011; var MM = 9; var DD = 25; var HH = 16; var MI = 50; var SS = 00; function atualizaContador() { var hoje = new Date(); var futuro = new Date(YY, MM - 1, DD, HH, MI, SS); document.getElementById('txtData').value = DD + '/' + MM + '/' + YY; document.getElementById('txtData').disabled = true; var ss = parseInt((futuro - hoje) / 1000); var mm = parseInt(ss / 60); var hh = parseInt(mm / 60); var dd = parseInt(hh / 24); ss = ss - (mm * 60); mm = mm - (hh * 60); hh = hh - (dd * 24); var faltam = ''; faltam += (dd && dd > 1) ? dd + ' <span class="alt">dias</span> , ' : (dd == 1 ? '1 <span class="alt">dia</span> , ' : ''); faltam += (toString(hh).length) ? hh + ' <span class="alt">horas</span> , ' : ''; faltam += (toString(mm).length) ? mm + ' <span class="alt">min e</span> ' : ''; faltam += ss + ' <span class="alt">seg</span>'; if (dd + hh + mm + ss > 0) { $("regressiva").innerHTML = faltam; setTimeout(atualizaContador, 1000); } else { $("regressiva").innerHTML = 'CHEGOU!!!!'; setTimeout(atualizaContador, 1000); } } </script> <title></title> </head> <body onload='atualizaContador()'> <form id="form1" runat="server"> <input id="txtData" type="text" style="width: 60px;" /> <br /> <span id="regressiva"></span> </form> </body> </html>
Da uma olhada nesse link:
http://social.msdn.microsoft.com/forums/aspnet/pt-BR/5d55624f-20c9-403d-b9ae-0eb7cb690223/dvidas-para-dev-cronmetro-aspnet
Ou
http://rafaelrend.wordpress.com/2012/02/07/cronometro-para-asp-net-c-usercontrol/
Att,
- Sugerido como Resposta Ricardo Barbosa Cortes quinta-feira, 26 de junho de 2014 16:40
- Editado Ricardo Barbosa Cortes quinta-feira, 26 de junho de 2014 16:41
- Não Sugerido como Resposta Ricardo Barbosa Cortes sexta-feira, 27 de junho de 2014 11:16
-
Prezado Ricardo, boa tarde ! Obrigado!
Realmente é o que pensei, mas ainda tenho dúvida sobre a questão da inatividade, ou seja a contagem irá ser regressiva sim, suponhamos os 30 minutos, se por acaso o usuário ficar com a tela aberta sem fazer nenhuma operação e chegue a 15 minutos, e de repente clique em um link do sistema ou botão e ocorra um postback, o contador tem que voltar aos 30 minutos. Mas aí entra a questão da masterpage e as páginas que abro dentro desta. o Contador estaria na masterpage por exemplo: frmMae1.aspx, e neste há um iframe onde são abertas várias páginas diferentes de vários módulos, por exemplo que seja aberto dentro deste iframe
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="frmMae1.aspx.cs" Inherits="_frmMae1_0" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
...
...
<div id="conteudo"> <iframe name="" src="<% =sUrl %>" style="border:none;height:677px; width: 1240px"; marginheight="0"; marginwidth="0" scrolling="auto"></iframe> </div>
Suponha que eu abra o controleCad.aspx dentro deste iframe do frmMae1.aspx - os postbacks realizados no controleCad.aspx não afetam nada no frmMae1.aspx, e portanto o contador regressivo frmMae1.aspx não é restado e reiniciado para 30 min a cada vez que ocorre um postback no sistema. É principalmente isto que preciso - como fazer isto?
Qualquer dúvida, tento esclarecer melhor.
Abraço e obrigado
- Editado Angelo.Net quinta-feira, 26 de junho de 2014 20:42
-
Bom dia Angelo,
Separando do FrmMae1, eu não saberia como fazer, so da maeira que te passei nos liks, que reseta quado é clicado, mas separar os frames não sei. Melhor aguardar alguém que saiba...De qualquer forma vou dar uma olhada para ver se acho algo.
Att,
- Editado Ricardo Barbosa Cortes sexta-feira, 27 de junho de 2014 11:31