none
Reinniciar contador de sesion RRS feed

  • Pregunta

  • Tegno el siguiente codigo en un control de usuario que esta inscrustado  en todos mis webforms excepto en el login:

    <table style="width: 100%;">
        <tr>
            <td>
               </td>
            <td id ="contador">
                &nbsp;&nbsp;</td>
            <td style="text-align: right">&nbsp;<asp:Label ID="l_titulo" runat="server" Text="Usuario: "></asp:Label>
                <asp:Label ID="l_usuario" runat="server" Font-Underline="True"></asp:Label>
            </td>
        </tr>
        </table>

    <script>   
        var v;   

        function last_reload()
        {    v =  new Date();             
            t();
        }

        function t()
        {
            var lbl =document.getElementById('contador');  
            n=new Date();

            //segundos
            s=(<%=Session.Timeout%>*60)-Math.round((n.getTime()-v.getTime())/1000.);
            m=0;
            h=0;
            if(s<0)
            {
                lbl.innerHTML='La sesión ha expirado';             
            }
            else
            {
                if(s>59) {m=Math.floor(s/60); s=s-m*60}
                if(m>59) {h=Math.floor(m/60);m=m-h*60} 
                if(s<10) {s="0"+s}
                if(m<10) {m="0"+m}
                lbl.innerHTML="Tiempo restante para que expire la sesión: "+h+":"+m+":"+s+'';           

                window.setTimeout("t();",999);
            }
        }

    </script>

    Las diferentes paginas de mi proyecto las abro con un tag <a> como el siguiente:

    <a href="ejemplo.aspx" id="h_inicio" runat="server" visible="false"></a>

    El contador funciona a la perfeccion, pero hay diferentes casos, por ejemplo si abrimos con click derecho otra ventana de mi proyecto quiero que el contador se reinicie en las pestañas que ya se encontrasen abiertas, obvio el contador en la pagina que recien se abra empezara correcamente, si el contador no se reinicia en las demas paginas que se encontrasen abiertas apareceria mensjae de termino de sesion cuando aun la sesion tiene tiempo disponible.

    Espero haberme explicado

    martes, 24 de marzo de 2015 20:16

Todas las respuestas

  • hola

    recuerda que el objeto Session genera un SessionId por cada instancia del browser que abres, pero debe ser una nueva instancia

    las penstañas del browser se consideran parte de la misma instancia por eso no generan un nuevo sessionid y por lo tanto mantienen la informacion y el timeout

    es asi como funciona el browser lsa penstañas comparten la session

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 24 de marzo de 2015 22:39
  • Asi es comparten la sesion, pero como puedo hacer que precisamente la session se muestre con el mismo tiempo en las ventanas abiertas?, se que pudiera darse el caso de que en algunas ventanas el contador llegue a cero pero la sesion este activa por que se hizo algun postback en otra ventana, por lo cual quisiera coordinar el contador en las ventanas que se encuentren abierta, tienes alguna idea?
    martes, 24 de marzo de 2015 22:59
  • hola

    si bien la session en el servidor se comparte entre solapas del browser el javascript que ejecutes es independiente

    quizas debas hacer alguna invocacion al servidor usando ajax para solicitar la sincronozacion entre estas

    podrias usar jquery con $.ajax invocando un webmethod definido en la pagina, de esta forma las ventanas se sincronizan de alguna forma

    igual es algo bastante extraño lo que quiere lograr, el tiempo de session deberia sea algo estimado y no un conteo exacto y perfectamente sincronizado

    porque si lo vas a sincronizar al extremo vas a tener que notificar desde el servidor con alguna accion quizas usando SignalR, para que el servidor se pueda comunicar con las paginas abiertas

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 24 de marzo de 2015 23:54
  • Que tal Leandro te comento que intente de algunas maneras mandar llamar la funcion last_reload() desdeotras ventanas y que asi se reiniciara el contador, pero trate usando window.parent.last_reload(), tambien use window.opener.last_reload() pero en este ultimo caso me marco alguna excepcion,, no existe entonces alguna forma de hacerlo con lo convensional?
    miércoles, 25 de marzo de 2015 15:39