Hayadi's Blog

vendredi, décembre 23, 2005

Comment gérer astucieusement les variables Session

L'objet Session est très utile pour vos projets ASP .NET. Je ne vous offencerais pas en expliquant de nouveau comment il fonctionne mais l'objet de cet article est de vous montrer comment encapsuler l'accès à ses données pour qu'il soit plus agréable à utiliser.
Quand vous placez un objet dans une Session d'un utilisateur, vous procédez sans doute ainsi :

Session("NomUtilisateur") = "Richard"
Session["NomUtilisateur"] = "Richard";


Il y a plusieurs inconvénients :
Si la variable NomUtilisateur est utilisé dans plusieurs pages, il faut bien savoir qu'elle s'appele NomUtilisateur, il ne faut pas faire de fautes de frappes et surtout être sur que cette variable n'existe pas déjà dans une autre page avec une utilisation complètement différente. De plus, si vous voulez changer le nom de la variable en LeNomDelUtilisateur, vous devez revoir tout votre code de toutes vos pages,
La variable est non typé (c'est un Object dans Session) donc quand vous voulez y accéder, vous êtes obligés d'effectuer des opérations de casting :

Dim sM as String = CType(Session("NomUtilisateur"), String)
string sM = (string) Session["NomUtilisateur"];


Qui dit casting dit possibilité d'erreur de casting.
Donc, l'idée est de créer une classe tampon qui accédera aux variables sessions. Elle est du genre :

Public Class Utils
Public Shared Property NomUtilisateur as String
Get
Return HttpContext.Current.Session("NomUtilisateur")
End Get
Set(value as String)
HttpContext.Current.Session("NomUtilisateur") = value
End Set
End Property
End Class
----------------------------
namespace Appli.Web
{
public class Utils
{
public static string
NomUtilisateur
{
get{return (string) HttpContext.Current.Session["NomUtilisateur"];}
set{HttpContext.Current.Session["NomUtilisateur"] = value;}
}
}
}

Moralité, dans vos pages vous pouvez écrire :

Dim sM as String = Utils.NomUtilisateur
string sM = Utils.NomUtilisateur;


Pas de casting, un seul endroit pour gérer le nom des variables sessions, etc.
Il y a également un autre avantage à travailler de cette façon : en allant plus loin dans le code, on peut ainsi gérer facilement (et même dynamiquement), l'endoit ou sont stockées les variables sessions (par exemple dans une base de données autre que SQL Server) mais c'est une autre histoire...