none
Variables de Sesion y Aplicacion. RRS feed

  • Pregunta

  • Saludos.
    Quisiera saber como usar de forma adecuada las variables de sesion y aplicacion en el caso en el cual un usuario se debe autenticar ante un sistema. La idea es que el usuario una vez autenticado, pueda recorrer las diferentes paginas que componen al sistema, por lo cual en este caso almaceno el login en una variable de sesion y en los metodos Page_Load de cada pagina pregunto si la variable de sesion es distinta de null, si lo es, el usuario puede navegar a lo largo del sistema, pero si la variable es nula es dirigido automaticamente a la pagina de login.

    Tambien quiero que el usuario solo se pueda logear una vez al sistema por maquina, es decir, si se logea en su computadora no se puede logear en otra, es por eso que guardo el login de ese usuario en la variable de aplicacion.

    El problema se me presenta en el manejo de estas variables a la hora de salir del sistema. Existe un vinculo "Salir" que redirecciona automaticamente a la pagina de Login y elimina todas las variables de sesion, pero este mismo punto no lo he podido lograr de forma correcta con la variable de aplicacion. Tambien tengo problemas a la hora de que el usuario en lugar de pulsar "Salir" cierre el navegador.

    Como puedo manejar estas variables de forma correcta?
    Gracias por la ayuda.
    Hugo Assanti.
    jueves, 7 de febrero de 2008 13:51

Todas las respuestas

  • a ver si entiendo.

    cuando tu usuario hace click en 'salir' es redirigido a la página de logn. en ese proceso vos hacés algo como Application["login_usuario"] = null para eliminar el login del usuario de la application.

     

    me imagino que el problema es que tu usuario vuelve a abrir un explorador apuntando hacia tu site y es automáticamente autenticado como si ["login_usuario"] no furea null. Correcto ?

     

    Tanto esa situación como el caso en el que el usuario cierra el navegador, creo que podrían ser manejados del siguiente modo. En el archivo Global.asax podés modificar los events handlers para los objetos de sesión y aplicación.

    En ambos casos, desde el handler del evento session_end  deberías inicializar la variable de aplicación del usuario a null. 

    De hecho, podrías también editar el evento session_start para que cada vez que se inicie una sesión, antes de pasar por el proceso de autenticación, inicialices la variable de aplicación correspondiente a ese usuario en null.

     

    esto también puede variar si estás utilizando seguridad integrada o forms autentication.

     

     

    jueves, 7 de febrero de 2008 14:28
  • Al hacer click en "Salir" elimino las variables de sesion haciendo Session.Abandon() y el login que este almacenado en esta variable la elimino de Aplicacion ya que alli se encuentran todos los login de las diferentes personas que estan conectadas al sistema. No puedo hacer Application["login_usuario"] = null porque perderia todos los login de las personas que se encuentran usando el sistema.

    Basicamente el problema radica en como eliminar de la variable de aplicacion el login que se encuentra almacenado en la variable de aplicacion.

    Este es el codigo que estoy usando ahora para poder realizar la operacion:

            Usuario usuario = (Usuario)Session["UsuarioLogeado"];
            ArrayList listaUsuarios = new ArrayList();
            listaUsuarios = (ArrayList)Application["listaUsuariosConectados"];
            for (int i = 0; i < listaUsuarios.Count; i++)
            {
                if (listaUsuariosIdea.ToString() == usuario.Login)
                {
                    listaUsuarios.RemoveAt(i);
                }
            }
            Application["listaUsuariosConectados"] = listaUsuarios;
            Session.Abandon();
            Response.Redirect("../../Vistas/Login/inicio.aspx", false);

    Este es el codigo que se ejecuta al hacer click en "Salir", pero donde colocarlo en el caso en el que el usuario cierra el navegador?


    " me imagino que el problema es que tu usuario vuelve a abrir un explorador apuntando hacia tu site y es automáticamente autenticado como si ["login_usuario"] no furea null. Correcto ? ". Es correcto, y como la variable no es nula el usuario no puede entrar al sistema porque en teoria ya se encuentra autenticado y ya se encuentra navengando dentro del mismo.

    Saludos y gracias por la ayuda.

    jueves, 7 de febrero de 2008 14:56
  • el session_end no necesariamente va a ejecutarse cuando el usuario cierre todos sus browsers. podrías intentar utilizando un javascript para hacer un llamado a tu botón de "salir" antes de que el explorador se cierre, pero en ese caso deberías controlar que no hubiera otros exploradores abiertos (para que al cerrar uno no pierda su sesión en todos).
    jueves, 7 de febrero de 2008 16:12