none
Expirar (condicional) mediante inatividade RRS feed

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

    quarta-feira, 25 de junho de 2014 22:56

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,



    quinta-feira, 26 de junho de 2014 16:39
  • 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
    quinta-feira, 26 de junho de 2014 20:41
  • 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,


    sexta-feira, 27 de junho de 2014 11:29