The Butterfly Effect (2)

Antonio Fontes / Blog / Conseil / Communication / Genève / HEG / Intelligence et guerre économique / Management et sécurité de l'information / NTIC / Sécurité des applications web / Veille

<December 2008>
SuMoTuWeThFrSa
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910


Navigation

Subscriptions

Post Categories



ASP Classique et ASP.Net: partager les variables de session

Une question que l’on m’a déjà posé plus d’une fois: comment partager des variables de session entre une application ASP et une application ASP.Net ?

Ce cas de figure se présente principalement dans le cas de gros projets de migration durant lesquels il est nécessaire de conserver une couche existante (ASP) parallèlement à la nouvelle couche en Dotnet.

Je ne vais pas m’étaler longtemps sur le sujet mais voici une méthode en quelques étapes:


Identifier la session

Dans tous les cas, il y a une ‘première’ requête. Cependant, il est rarement possible de déterminer à l’avance, avec certitude, dans quelle application l’utilisateur va faire la première requête.

Les deux mécanismes de session se basent respectivement sur une valeur stockée dans un cookie. Ce dernier contient en effet un identificateur de session permettant à l’application ASP Classique ou ASP.Net de faire le lien entre le client et toutes ses variables de session.

La problématique ici est que chacun des deux mécanismes possède son propre identificateur. Il faut donc créer un ‘lien’ entre les deux mécanismes. Ce lien peut être une chaîne texte, un nombre généré aléatoirement ou tout simplement l’un des deux identificateurs de session qui va être considéré comme le ‘maître’. Ce ‘maître’ , que je nomme ‘masterid’ est alors placé dans un cookie. L’application appelée va donc vérifier si un masterid est disponible, le cas échéant, elle le créera.

En image:

Stockage des clés-valeurs de session

Les applications web dynamiques consomment généralement une base de données. Nous allons donc l’utiliser, elle est là pour ça!

Le but ici est donc simplement de placer toutes les combinaisons de clés-valeurs faisant référence à un client au sein de la base de données. Voici une proposition de structure de table:

Récupération / Stockage des clés/valeurs de session

Chaque mécanisme (ASP classique et ASP.Net) doit disposer de ses propres méthodes de modification et d’accès aux variables de session. L’exemple suivant pourrait convenir:

SessionInit()
Effectue le processus décrit plus haut, consistant à initialiser un “masterid” s’il n’est pas détecté ou à récupérer celui présent dans le cookie du client.

SessionSetValue(key, value)
Insère la combinaison clé-valeur dans la base de données. Dans le cas où la clé est déjà stockée dans la table, une mise à jour sera effectuée.

SessionGetValue(key)
Extrait la valeur de la clé indiquée à partir de la base de données.

Conclusion

Nous avons ici un mécanisme simple de gestion partagée de variables de session entre une application de type ASP classique et ASP.Net. Bien entendu, cette méthode peut être étendue à toute autre technologie ‘web dynamique’ telle que PHP ou JSP par exemple.

La solution proposée reste très ‘basique’ dans la mesure où aucun souci réel de sécurité n’a été discuté (complexité et sécurité du masterid?) et seule des combinaisons clé-valeurs de type ‘texte’ peuvent être utilisées. Dans la majeure partie des cas cependant, cela suffira largement.

Si vous souhaitez cependant faire évoluer votre mécanisme de partage de sessions vers une version offrant plus de fonctionnalités, il vous reste à examiner la proposition tout droit venue de chez Microsoft: How to Share Session State Between Classic ASP and ASP.NET.

posted on Monday, October 04, 2004 8:21 PM by saphyr





Powered by Dot Net Junkies, by Telligent Systems