none
Limitar Tiempo de Variable Session segun actividad RRS feed

  • Pregunta

  • Buenos días, la consulta es la siguiente, espero me puedan colaborar.

    Tengo unas variables de sessión en la aplicación donde guardo unos datos y valido que si están vacias pues que me redirija a la pantalla de login. Ahora me surgio un problema, si el tiempo de la variable de sesión termina, pues hay que reloguiarse asi este en uso la aplicación, mi idea es saber si hay modo de validar si la aplicación esta en uso pues que siga la variable viva, y si hay un tiempo de inactividad pues que se termine.

    martes, 1 de julio de 2014 12:50

Todas las respuestas

  • No se si entiendo el problema... quieres que si el usuario tiene la aplicación "abierta" pero p. ej. se va a comer no le caduque la sesión (como pasa p. ej. con gmail)?

    La solución a esto pasa por tener un temporizador en javascript y realizar cada x minutos una llamada ajax a un controlador (que no haga nada). Eso mantendrá la sesión abierta.

    Saludos!


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis

    martes, 1 de julio de 2014 13:25
  • Osea mi sesión dura 40 minutos, lo que quiero es que si la persona esta trabajando que no se termine la sesión, si no que en ese caso haga caso omiso al tiempo de la sesión y que siga abierta
    martes, 1 de julio de 2014 13:35
  • hola

    partamos de la base que para la seguridad no deberias usar ninguna session, deberias usar asp.net membership de esta forma redirecciona de forma automatica a la pagina de login cuando termina

    Login – Usando Password con Hash

    analiza como se define en el config la seguridad, no se usa session para el login

    ----

    [ASP.NET] Mantener la Session Activa Indefinidamente

    en este articulo podrias desde el cliente conocer cuanto falta para que expire la session

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 1 de julio de 2014 14:04
  • Hola Leandro, Intente usar lo que indicas, el membership pero no logre encontrar un ejemplo que me ayudara para guiarme, ya que los que encontré usaban sql server y entity framework, en mi caso, la db que uso es informix y la consumo desde un webservice, si pudieran orientarme en eso te lo agradecería enormemente, ya que estoy teniendo problemas enormes con la sesión, ahora me doy cuenta que cuando finaliza la sesión asi como la tengo me bloquea toda la aplicación y no se que es.
    martes, 1 de julio de 2014 20:52
  • Buenas!

    Olvídate de membership como tal. Lo que tu necesitas es usar FormsAuthentication. Una cosa es membership (acceso a la BBDD de datos para validar login/pwd) y otra cosa distinta es verificar que una petición está autenticada porque tiene la cookie de autenticación. Lo primero es membership, lo segundo FormsAuthentication.

    Para crear la cookie basta con llamar a FormsAuthentication.SetAuthCookie. Este método crea la cookie de autenticación de forma que de ahora en adelante el usuario estará ya autenticado. La cookie de autenticación *por defecto* no caduca mientras el usuario tenga la ventana abierta. Otra cosa distinta es la sesión. La sesión se controla a través de otra cookie distinta y la sesión caduca cada x minutos SIN que se haya recibido petición alguna del usuario.

    Para:

    1. Mantener al usuario autenticado no es necesario nada especial: mientras haya la ventana del navegador abierta, el usuario seguirá autenticado. A la que cierre la ventana y la vuelva abrir, dejará de estarlo. (O hasta que se llame a FormsAuthentication.SignOut).
    2. Mantener la sesión deben hacerse peticiones cada X tiempo. Si el usuario NO las hace, una solución es la que te comenté: timer javascript y una petición AJAX a una URL válida pero que no haga nada (puede devolver un HTTP 204). Esta petición AJAX renovará la sesión, manteniéndola "indefinidamente" abierta.

    Lo que es mala práctica en ASP.NET es usar la sesión para meter datos como el nombre del usuario o si está logado o no. Para eso está la cookie de autenticación y FormsAuthentication. La sesión debes dejarla para datos de eso... de sesión :) Como un carrito de compra o un historial de acciones del usuario.

    Saludos!


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis

    sábado, 5 de julio de 2014 11:06