oct 8 2009

Manejo de Sesiones en Páginas ASP.NET (Modo Práctico)

Category: Artículos | Webdwaks @ 11:42

Las Sesiones son una gran ventaja para mantener valores de variables ó clases siempre disponible en toda la navegación de un sitio.

Uno trata de mantener ciertos datos disponibles que al final siempre se encargan de configurar ó controlar estados de nuestra página. Un ejemplo simple sería el mantener vivo siempre que permisos tiene un usuario en un sitio web. Al usuario entrar al sistema se carga en una Sesion ese tipo de información.

Siempre se va descontrolando la cantidad de Sesiones que se tienen en el sitio al final terminamos un sitio con muchas sesiones creadas.

Como ASP.NET usando C# ó VB se basa en Programación Orientada a Objeto que es una característica que nos brinda ventajas excelente para manejar las Sesiones basado en el concepto de clases. Un concepto de mantener viva una Clase Global que sea la que nosotros interactuemos siempre y que se encargue de administrar 1 sola Sesion.

Imaginate accesar los permisos de un usuario de este modo:

if(Global.Current.UsuarioActivo.Permisos.Puede("EDITAR-PAGINA")){}

Allí se ve como se accesa una clase Global que tiene internamente expuesta por Propiedades otras Clases que ustedes definan y sirvan para definir configuraciones, explicaré este ejemplo:

1- Global representa la clase principal
2. Current es una propiedad static que devuelve una clase Global emulando un singelton
3. UsuarioActivo es una propiedad de la clase Global que devuelve una clase de tipo Usuario
4- Permisos es una propiedad dentro de la clase Usuario que tiene la informacion de cuales son los permisos de este usuario
5- El método Puede de la Clase Permiso es solo para facilitar una consulta a los permisos que te devuelva true ó false en cualquier if else

Todo dentro de Global es lo que siempre acostumbramos a realizar cuando somos muy seguidores de POO, lo único que mostraré en este pequeño Tutorial es la creación de la clase Global para que trabaje basada en Sesion.

Las  5 cosas importantes que debe tener la clase son:

1- Propiedad Static privada de tipo Global para guardar los cambios temporales
2- Propiedad Static de tipo Global que represente la Sesion activa
3- Método static para iniciar la Sesion
4- Método static para cerrar la Sesion
5- Método static para actualizar la Sesion

Basado en esos 5 puntos quedaría una clase de la siguiente forma:

001public class Global
002{
003    private static Global _Global;
004    public static Global Config
005    {
006        get
007        {
008            if (HttpContext.Current.Session["GLOBAL-CONFIG"] != null)
009            {
010                _Global = (Global)HttpContext.Current.Session["GLOBAL-CONFIG"];
011                return _Global;
012            }
013            else{ return null; }
014        }
015    }
016
017    public static void StartSession(Global global)
018    {
019        HttpContext.Current.Session["GLOBAL-CONFIG"] = global;
020    }
021
022    public static void CloseSession()
023    {
024        HttpContext.Current.Session.Clear();
025        HttpContext.Current.Session.Abandon();
026    }
027
028    public static void Update()
029    {
030        HttpContext.Current.Session["GLOBAL-CONFIG"] = _Global;
031    }
032}

Con esa estructura solo quedaría exponer propiedades que representen clases que usaras para guardar valores que necesites, como el ejemplo anterior se tenia la Propiedad UsuarioActivo que es una clase Usuario, de esta forma por medio de la clase Global se accede a estos valores desde 1 sola Sesion.

Cosas que debes tener claro es que cada valor que edites dentro de la clase Global va seguido de un Global.Update que se encarga de agarrar la variable static privada y actualizar la Sesion activa.

Cualquier consulta no dude en preguntar. 

Tags:

Actualmente calificado con 2.5 por 2 personas

  • Currently 2,5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Comentarios