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: session httpcontext sesion