Blog dedicado a la programación .NET y la informática en general

Archivo para julio, 2013

Como hacer persistente la autenticación en ASP.NET mediante Cookies en Membership

Nota : Me he encontrado entre mis borradores este artículo que no publiqué en su momento, ya está desfasado pero quién sabe si le sirve a alguien por lo que lo publico ahora.

Puede daros el caso como el que yo tengo en el que vuestro proveedor de hosting limite el tiempo máximo de timeout de la sessión a un valor escaso para vuestro fin. Lo cual obliga a vuestros usuarios a tener que autenticarse cada vez que acceden a vuestra web. Para evitar esto y no depender del timeout de sesión podemos hacer persistente la autenticación mediante el uso de Cookies.

Las cookies son ficheros de texto de intercambio entre el explorador y el servidor que almacenan información relevante a la página web y de forma individual para cada usuario. Estos ficheros son almacenados en el equipo que usa el cliente y en algunos casos son objeto de fines malintencionados por lo que evitaremos guardar información confidencial y en nuestro caso almacenaremos un token o símbolo que identifique al usuario.

Cuando el usuario ha sido autenticado correctamente se crea la cookie a guardar en el cliente:

   1: // Crea el contenedor de autenticación
   2: FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
   3:                                                                     this.LoginUser.UserName,
   4:                                                                     DateTime.Now,
   5:                                                                     DateTime.Now.AddDays(Constantes.VariablesConfiguracion.AutenticationCookieDaysExpired),
   6:                                                                     true,
   7:                                                                     string.Empty);
   8:
   9: // Encripta the ticket de autenticación
  10: string encTicket = FormsAuthentication.Encrypt(ticket);
  11:
  12: // Crea la cookie
  13: HttpCookie galleta = new HttpCookie(Constantes.AutenticacionCookieName, encTicket);
  14: galleta.Expires = ticket.Expiration;
  15: Response.Cookies.Add(galleta);

Para recuperar la cookie almacenada seguiremos este otro código:

   1: MembershipUser usuarioAutenticado = Membership.GetUser();
   2:
   3: // Comprueba si tiene una cookie almacenada para restaurar la autenticación
   4: if (usuarioAutenticado == null)
   5: {
   6:     // Se comprueba si hay una cookie almacenada
   7:     HttpCookie myCookie = Request.Cookies[Constantes.AutenticacionCookieName];
   8:
   9:     // Lee la cookie y comprueba el usuario y si es válido lo da como autenticado
  10:     if (myCookie != null)
  11:     {
  12:         FormsAuthenticationTicket ticketRecupeado = FormsAuthentication.Decrypt(myCookie.Value);
  13:         string strUsuario = ticketRecupeado.Name;
  14:         MembershipUser usuarioCookie = Membership.GetUser(strUsuario);
  15:         if (usuarioCookie != null && usuarioCookie.IsApproved && !usuarioCookie.IsLockedOut)
  16:         {
  17:             FormsAuthentication.SetAuthCookie(usuarioCookie.UserName, true);
  18:             Response.Redirect(Request.Url.AbsoluteUri);
  19:         }
  20:     }
  21: }

Y eliminamos la cookie cuando el usuario cierra la sesión manualmente.

   1: // Desconecta al usuario activo y elimina sus cookies
   2: HttpCookie myCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
   3: if (myCookie != null)
   4: {
   5:     myCookie.Expires = DateTime.Now;
   6:     Response.Cookies.Set(myCookie);
   7: }

Espero que os funcione.

Anuncios

Como saber si te has quedado sin suministro eléctrico en casa en vacaciones

¿A quién no le ha pasado alguna vez que al volver de las vacaciones se ha encontrado que la luz se ha ido y todo el frigorífico y congelador se ha ido al garete?

¿Te gustaría saber a través de internet si se ha ido la luz en tu casa gratis y sin muchas complicaciones?

Pues entonces atento.

image

¿Qué necesitas?

  1. Un ordenador encendido 24 horas durante el periodo que estés fuera de casa. OJO un PC de sobremesa de “toda la vida” ronda los 150W de consumo, pero un microPC como puede ser de la marca Zotac como el que yo tengo en casa rondan los 20W.
  2. Configurar la BIOS del ordenador para que se encienda de forma automática cuando la luz vuelva.
  3. Tener instalado un cliente de mensajería instantánea y una cuenta asociada exclusivamente para este fin.
  4. Configurar el cliente de mensajería para que arranque de forma automática.
  5. Agregar la cuenta de mensajería instantánea a tu grupo de contactos para ver si está “online” o no.

¿Cómo funciona?

Cuando estés fuera de casa podrás saber si tienes suministro eléctrico cuando accedas a tu cliente de mensajería instantánea y veas que el contacto, que está instalado en el PC encendido las 24 horas, está “online” o no. Si la luz se va el ordenador no estará encendido y por tanto el contacto desconectado. Cuando vuelva la luz el ordenador se encenderá de forma automática y también el cliente de mensajería instantánea y por tanto el contacto estará “online”.

¿Te interesa que entre en detalles?… deja entones un comentario en el blog y desarrollaré con más detalles todo lo necesario con el cliente de mensajería “Skype”.

A %d blogueros les gusta esto: