none
Mantener sesión activa MVC RRS feed

  • Pregunta

  • Estimados,

    Tengo una consulta en cuánto al uso de recursos para mantener la sesión. La solución que apliqué fue la siguiente:

    https://channel9.msdn.com/blogs/daniel+garzon/mantenimiento-de-sesiones

    Implemente la solución tal como indica el video de la siguiente manera:

    1. Cree un Generic Handler

        public class SessionActive : IHttpHandler, IRequiresSessionState 
        {

            public void ProcessRequest(HttpContext context)
            {
                context.Response.Cache.SetNoStore();
                context.Response.ContentType = "application/x-javascript";
                context.Response.Write("//");
            }

            public bool IsReusable
            {
                get
                {
                    return true;
                }
            }
        }

    2. En el código del cliente coloque el siguiente código:

        <script type="text/javascript">

            //Ejecuta el script en segundo plano evitando así que caduque la sesión de esta página
            function SessionActivate() {
                var CONTROLADOR = "SessionActive.ashx";
                var head = document.getElementsByTagName('head').item(0);
                script = document.createElement('script');
                script.src = CONTROLADOR;
                script.setAttribute('type', 'text/javascript');
                script.defer = true;
                head.appendChild(script);
            }

            setInterval('SessionActivate()',@Convert.ToInt64(0.9 * (@Session.Timeout * 60000)) );

        </script>

    3. En el web.config:

    <sessionState mode="InProc" timeout="20"/>


    De esta manera la sesión nunca se pierde, sino que se renueva cuando el usuario hace alguna acción o antes de que pasen los 20 minutos (aproximadamente 18 minutos).

    Mi duda es: ¿Que diferencia hay en la utilización de recursos en caso de implementar esta solución para manetener la sesión por un tiempo prolongado o ponerle en la opcion del web config 480 (8 horas)?

    Agradezco que alguien me responda a la pregunta porque quiero hacer la mejor utilización de los recursos del servidor.

    Saludos.

    Laura




    • Cambiado Karen Malagón lunes, 29 de junio de 2015 22:09 ASP.NET MVC issue
    miércoles, 24 de junio de 2015 18:37

Respuestas

  • hola

    >>¿Que diferencia hay en la utilización de recursos en caso de implementar esta solución para manetener la sesión por un tiempo prolongado o ponerle en la opcion del web config 480 (8 horas)?

    la diferencia esta en que al definir en el config un tiempo de session muy alto estas penalizando el servidor porque mantendra por mas tiempo la info en memoria

    cuando validas periodicamente si el cliente tiene algun problema no se espera 8hs para eliminar los datos de la memoria del servidor sino que se hace en 20min

    igualmente no necesitas crear un handler para implementarlo, podrias haberlo realizado por medio de un action en el controller y usar el $.ajax de jquery

    [ASP.NET] Mantener la Session Activa Indefinidamente

    en el articulo uso asp.net, pero solo cambiarias en el $.ajax para usar @Url.Action('action', 'controller')

    no necesitas de un handler

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    miércoles, 24 de junio de 2015 19:40

Todas las respuestas

  • La diferencia es que utilizando la solución de llamar a un servicio periódicamente únicamente se mantiene la sesión si el usuario tiene la página cargada en el navegador. Si el usuario sale de la web o cierra el navegador se finaliza la sesión a los 20 minutos.

    Sin embargo poniendo un timeout de sesión de 8 horas los datos de sesión se mantendrán 8 horas independientemente de que el usuario abandone la página.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...


    miércoles, 24 de junio de 2015 18:43
  • Comprendo tu respuesta Asier.

    Ahora una consulta mas. 

    Mi sistema se utiliza en un call center, donde los usuarios a veces dejan por mas de 20 minutos de inactividad el sistema.

    Ahora bien, en caso de que la inactividad en el sistema sea por 2 horas, con esta solución el el transcurso de dos horas se estaría manteniendo la sesión y usando recursos. Pero si yo quisiera que el estado de sesión se restaure cuando el usuario vuelve a hacer clic en algún elemento de la página (y no que se vaya renovando cada 20 minutos) así sea 2 o 3 horas después de que dejo inactivo el sistema ¿Se te ocurre alguna solución para evitar el uso de recursos durante las 2 o 3 horas de inactividad en el sistema?

    Gracias

    miércoles, 24 de junio de 2015 18:56
  • Eso depende mucho de la aplicación y la información que se mantenga en las variables de sesión.

    Si el único problema es el de la autenticación de usuario podrías implementar algún sistema para "recordar" el usuario a través de cookies.

    Si necesitas mantener información de sesión lo que podrías hacer es limitar el máximo posible los datos almacenados en memoria para evitar consumir recursos en los tiempos de inactividad. Esto se puede hacer bien manteniendo la información de la sesión en base de datos o con un modelo mixto con parte de la información en variables de sesión y parte en base de datos.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...


    miércoles, 24 de junio de 2015 19:11
  • hola

    >>¿Que diferencia hay en la utilización de recursos en caso de implementar esta solución para manetener la sesión por un tiempo prolongado o ponerle en la opcion del web config 480 (8 horas)?

    la diferencia esta en que al definir en el config un tiempo de session muy alto estas penalizando el servidor porque mantendra por mas tiempo la info en memoria

    cuando validas periodicamente si el cliente tiene algun problema no se espera 8hs para eliminar los datos de la memoria del servidor sino que se hace en 20min

    igualmente no necesitas crear un handler para implementarlo, podrias haberlo realizado por medio de un action en el controller y usar el $.ajax de jquery

    [ASP.NET] Mantener la Session Activa Indefinidamente

    en el articulo uso asp.net, pero solo cambiarias en el $.ajax para usar @Url.Action('action', 'controller')

    no necesitas de un handler

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    miércoles, 24 de junio de 2015 19:40