Cuál es la clásica manera de usar un objeto sesión?
para guardar un dato en la sesión:
Session("CualquierNombre") = txtNombre.Text
Para recuperar el dato guardado en la sesión:
txtNombre.Text = ctype(Session("CualquierNombre"), String)
Nada del otro mundo.
Pero, está propenso a errores... no es cierto?
además, en el ejemplo se supone que debe devolver un dato de tipo string... qué pasa si no es así?
ERROR!!! lanzará un maldito mensaje de error...
Otra cosa, qué pasa si en una de esas me equivoco y en lugar de escribir Session("CualquierNombre") escribo Session("XualquierNombre")... y va a ser toda una jarana hasta que te des cuenta que el error estaba en que escribiste mal el nombre de la sesión.
Por todo lo dicho, están contentos ?? nooooooooooo, quieren una forma más eficiente de manejar las sesiones?? siiiiiiiiiiiiiiiiii
Ok, entonces empecemos:
Cómo usamos las sesiones de una manera más chévere y más eficiente... de modo que cada vez que queremos usar un objeto sesion no tengamos que estar verificando si es tal o cual tipo...
Nosotros crearemos una clase que se encargue de esta tarea... y en esta clase, cada propiedad tendrá a su cargo una sesión... osea, desde cada propiedad podemos asegurarnos que el dato que la sesión devuelva sea del dato que debe DEVOLVER!!!! osea, lo tipamos... claro!!! le damos un tipo de dato único.
Qué has dicho? vas a tipar las sesion?
eh... jeje... la verdad que no... pero sí el dato que devuelve... que es lo que realmente me importa y que en realidad viene a ser casi lo mismo... aunque "casi lo mismo" nunca ha sido lo mismo que "igual".
pasemos a las obras, digamos que necesito manipular tres sesiones... estas tres sesiones se usarán en toda la aplicación... por lo que es conveniente que centralice su control.
Entonces, añadimos un archivo de tipo clase a nuestro proyecto, llamémosle Sesion.vb
Esta clase tendrá tres propiedades, cada una manipula una sesión:
Escribimos el sgte código en la clase:
Namespace Sesion
Public Class Usuario
Private Const _CorreosEnviados As String = "CorreosEnviados"
Private Const _NombreCompleto As String = "NombreCompleto"
Private Const _EsAdministrador As String = "EsAdministrador"
Public Shared Property CorreosEnviados() As Integer
Get
If IsNothing(HttpContext.Current.Session(_CorreosEnviados)) Then
Return 0
Else
Return HttpContext.Current.Session(_CorreosEnviados)
End If
End Get
Set(ByVal value As Integer)
HttpContext.Current.Session(_CorreosEnviados) = value
End Set
End Property
Public Shared Property NombreCompleto() As String
Get
If IsNothing(HttpContext.Current.Session(_NombreCompleto)) Then
Return "Desconocido"
Else
Return HttpContext.Current.Session(_NombreCompleto)
End If
End Get
Set(ByVal value As String)
HttpContext.Current.Session(_NombreCompleto) = value
End Set
End Property
Public Shared Property EsAdministrador() As Boolean
Get
If IsNothing(HttpContext.Current.Session(_EsAdministrador)) Then
Return False
Else
Return HttpContext.Current.Session(_EsAdministrador)
End If
End Get
Set(ByVal value As Boolean)
HttpContext.Current.Session(_EsAdministrador) = value
End Set
End Property
End Class
End Namespace
Listo, es todo... ahora, para usarlo simplemente hacemos esto:
Coooooooooooooool !!!
2 comentarios:
Hola, gracias por este maravilloso tip que realmente me hacia falta pues manejo varias variables de sesion...
Solo quiero aportar lo siguiente: Dado que yo uso stric=on, me genera un error tu código en el return httpcontext.session(_prop), y me genera otro el isnothing, por lo que reescribi la propiedad asi, pero me gustaría su opinión experta al respecto:
public class sesion
private const _mivar as string = "var1"
public shared property Var1 as string
get
dim ret as string = cstr(httpcontext.current.session(_var1))
if ret is nothing then
return string.empty
else
return ret
end if
end get
set (byval value as string)
httpcontext.current.session(var1) = value
end set
end property
end class
Hola Sergio Enríquez,
experto? jeje no soy experto dr, nunca terminamos de aprender.
Mi idea era básicamente mostrar el esqueleto... osea lo principal de la idea... de allí a que hay que agregar verificaciones para tal o cual tipo de dato: estoy de acuerdo.
Está muy bien tu aporte.
Publicar un comentario