/// <summary> /// Permite guardar la sesion del usuario para futuras validaciones /// </summary> /// <param name="Login">Login de usuario</param> /// <param name="Sesiones">Lista de sesiones de usuarios</param> /// <param name="Sesion">Sesion ASPNET activa del usuario logeado</param> /// <history> /// [LucianoP] [jueves, 13 de julio de 2017] Creado /// </history> public static void Guardar(string Login, List <mSession> Sesiones, HttpSessionState Sesion, ref mSession SesionUsuario) { var sessionModel = new mSession(Sesion.SessionID, Login); Sesion["Id"] = sessionModel; SesionUsuario = sessionModel; Sesiones.Add(sessionModel); }
/// <summary> /// Permite eliminar la sesion del usuario /// </summary> /// <returns>true si el objeto fue removido exitosamente de la sesion</returns> /// <history> /// [LucianoP] [jueves, 13 de julio de 2017] Creado /// </history> public static bool Eliminar(List <mSession> Sesiones, mSession DatosSesion) { if (Sesiones == null || DatosSesion == null) { return(false); } return(Sesiones.Remove(DatosSesion)); }
protected void Session_End(object sender, EventArgs e) { mSession sesion = Session["Id"] as mSession; List <mSession> sesiones = Application["Sessions"] as List <mSession>; bool UsuarioCerroSesion = DatosSesion.Control.Eliminar(sesiones, sesion); //En caso de que haya algun problema al eliminar la sesion, es grabado en el registro de Log if (!UsuarioCerroSesion && sesion != null) { COA.Logger.Logueador.Loggear("Se cerró la sesión del usuario " + sesion.User + " pero la misma no pudo ser eliminada del registro de la aplicación", System.Diagnostics.EventLogEntryType.Information); } }
/// <summary> /// Autenticación de control de usuario de Login. /// </summary> protected void ucLogin_Authenticate(Object sender, System.Web.UI.WebControls.AuthenticateEventArgs e) { List <mSession> Sesiones = Application["Sessions"] as List <mSession>; mSession SesionUsuario = null; try { string strMensaje = ""; //Validaciones básicas. if (!ValidarDatos(ref strMensaje)) { //Fallaron validaciones básicas. ucLogin.FailureText = strMensaje; e.Authenticated = false; return; } cFormLogin objFormLogin = new cFormLogin(); ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Control de login de usuarios bool blnValidarSesion = DatosSesion.Control.Verificar(ucLogin.UserName, Sesiones, out strMensaje); if (!blnValidarSesion) { ucLogin.FailureText = strMensaje; e.Authenticated = false; return; } DatosSesion.Control.Guardar(ucLogin.UserName, Sesiones, Session, ref SesionUsuario); ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Autentica el usuario. string ip = hdnIP.Value.ToString(); //[GonzaloP] [miércoles, 22 de febrero de 2017] Work-Item: 9131 bool LoginSSO = false; //Si el usuario no es "master" entonces se valida si está habilitado el logueo por SSO. if (ucLogin.UserName != "master") { string strURL_SSO = System.Configuration.ConfigurationManager.AppSettings["ServicioValidacionToken"]; if (!String.IsNullOrWhiteSpace(strURL_SSO.Trim())) { LoginSSO = true; } } //Sólo el usuario "master" puede acceder directamente a CIPOL cuando está habilitado el logueo por SSO. if (!LoginSSO) { if (!objFormLogin.AutenticarUsuario(ref strMensaje, ucLogin.UserName, ucLogin.Password, new System.Net.CookieContainer(), ip)) { //Falló autenticación. ucLogin.FailureText = strMensaje; e.Authenticated = false; DatosSesion.Control.Eliminar(Sesiones, SesionUsuario); return; } //Validar Dominio if (ManejoSesion.DatosCIPOLSesion.DatosPadreCIPOLCliente.IDUsuario.Equals(0)) { if (ManejoSesion.DatosCIPOLSesion.DatosPadreCIPOLCliente.NombreDominio.Equals("X")) { //Abrir Administrar Tipo de Seguridad. Response.Redirect("frmTipoSeguridad.aspx?CambiarDominio=false"); e.Authenticated = false; DatosSesion.Control.Eliminar(Sesiones, SesionUsuario); return; } } else { if (ManejoSesion.DatosCIPOLSesion.DatosPadreCIPOLCliente.NombreDominio == null || ManejoSesion.DatosCIPOLSesion.DatosPadreCIPOLCliente.NombreDominio == Constantes.SeguridadNODefinida) { ucLogin.FailureText = "No existe un tipo de seguridad establecido, imposible iniciar la aplicación."; e.Authenticated = false; DatosSesion.Control.Eliminar(Sesiones, SesionUsuario); return; } } //Redirecciona a la página que obliga a cambiar clave if (ManejoSesion.DatosCIPOLSesion.DatosPadreCIPOLCliente.OtrosDatos("ForzarCambioClave") == "1") { try { if (ManejoSesion.DatosCIPOLSesion.DatosPadreCIPOLCliente.OtrosDatos("ForzarCambioClave.SeDebePreguntar") == "1") { /// 1 No obligatorio ManejoSesion.ModoCambioClave = 1; e.Authenticated = true; DatosSesion.Control.Eliminar(Sesiones, SesionUsuario); return; } } catch (Exception) { } /// 3 Obligatorio debido a que se debe forzar el cambio de la contraseña ManejoSesion.ModoCambioClave = 3; //[GonzaloP] [viernes, 22 de julio de 2016] Work-Item: 7289 - Se agrega el parámetro "true" para terminar la ejecución de la página actual. Response.Redirect("ChangedPassword\\frmCambiarContrasenia.aspx?url=../frmLogin.aspx", true); e.Authenticated = false; DatosSesion.Control.Eliminar(Sesiones, SesionUsuario); return; } e.Authenticated = true; } else { ucLogin.FailureText = "Se encuentra habilitado el logueo por SSO. No se permite el acceso directo a CIPOL."; e.Authenticated = false; DatosSesion.Control.Eliminar(Sesiones, SesionUsuario); return; } } catch (Exception ex) { ucLogin.FailureText = ex.Message; e.Authenticated = false; DatosSesion.Control.Eliminar(Sesiones, SesionUsuario); } }