Introduction

Dans une architecture web il est souvent nécessaire de vouloir transmettre ou d'avoir accès dans de nombreuses pages à certaines données. Pour ce faire, on peut utiliser par exemple les cookies, les paramètres HTTP ou les sessions. Chacunes de ces techniques a ses avantages et ses inconvénients.

Nous allons décrire dans cet article les différentes techniques et l'intéret des sessions par rapport aux autres et comment les utiliser dans XMLRAD.

Cookies, Paramètres HTTP et Sessions

La première technique qui vient à l'esprit pour toujours avoir une donnée précise à chaque requête c'est le cookie. Il permet de stocker des informations sur le poste client pour un domaine et un chemin particulier. A chaque requête, le cookie avec ses informations est transmis avec la requête HTTP. On peut alors les récupérer pour les traiter coté serveur. L'inconvénient c'est que la quantité de données est limitée à 4ko.

Les paramètres HTTP sont une alternative souvent peu utilisée dans ce cadre mais qui présente néanmoins des avantages. On les utilise surtout de façon unique pour une requête en particulier. Or, ils peuvent très bien servir puor transmettre des valeurs en permanence au serveur pour peu qu'ils soient retransmis à la page suivante via des paramètres dans l'URL ou des champs cachés pour les formulaires. L'inconvénient c'est que si l'on doit transmettre des dizaines de paramètres ou bien si l'on doit en rajouter un il faut le faire pour chaque page. L'avantage c'est que l'on est typiquement dans l'architecture Web HTTP sans état coté serveur: C'est la requête qui emporte avec elle tout son contexte d'exécution.

Lorsque l'on parle de session, c'est la plupart du temps pour évoquer un stockage de valeurs coté serveur lié à une session de l'utilisateur. Pour pouvoir utiliser cette session il faut l'identifier. Il faut donc que l'identificateur de la session soit toujours transmis avec la requête et ce, soit par cookie soit par paramètre HTTP. Avec cette technique on va pouvoir transmettre beaucoup plus d'informations avec seulement l'identifiant de la session retransmis à chaque requête. Cependant, on a ici un stockage d'état coté serveur. Or l'utilisateur peut avoir plusieurs plusieurs navigateurs ouverts sur la même application et utilisant donc des chemans de navigation différents. La gestion de la session doit donc prendre en compte ce facteur là pour déterminer dans quel contexte d'exécution on se situe, ce qui complexifie son utilisation.

Les Sessions XMLRAD

XMLRAD utilise un compromis entre les paramètres HTTP et les sessions. Tous les paramètres qui font partis de la session sont encodés dans un seul paramètre HTTP. Il faut juste s'assurer qu'il soit transmis à chaque page.

Chaque requête qui est traité par l"application XMLRAD a une partie Session dans laquelle on peut insérer des valeurs. Lors de la génération du document XML de sortie (OutputDoc) un noeud XMLC_RequestSession est ajouté dans la section XMLC_Params avec tous les paramètres encodés. Un autre noeud XMLC_RequestSession est ajouté contenant tous les paramètres sous forme XML pour être directement exploitable avec du XSL.

OutputDoc
Sélectionnez

<document>
  <XMLC_Params>
  ...
  <XMLC_RequestSession>
    3C584D4C435F5265717565737453657373696F6E3E3C4D79506172616D3E4D7956616C75653C2F4D79506172616D3E3C2F584D4C435F5265717565737453657373696F6E3E0D0A
  </XMLC_RequestSession>
  ...
  </XMLC_Params>
  <organizationS EOF="0" StartingRow="0" LastRow="9" ExactPaging="1" RowCount="14" PageCount="2" PageID="organization_4164891187866" CurrentPage="1" MaxRows="10" RecordName="organization">
    <organization>
      <ORG_ID>101</ORG_ID>
      <ORG_NAME>e-delos.com</ORG_NAME>
    </organization>
    <organization>
    ...
    </organization>
  </organizationS>
  ...
  <XMLC_RequestSession>
    <MyParam>MyValue</MyParam>
  </XMLC_RequestSession>
</document>

Pour que la session soit transmise à la prochaine requête il suffit que le contenu de XMLC_RequestSession de la section XMLC_Params soit transmis en tant que paramètre HTTP donc soit en paramètre d'URL soit en champs caché de formulaire:

XSL
Sélectionnez

<a href="{/document/Aliases/TrainingDLL}FormORGANIZATION?ORG_ID=101&XMLC_RequestSession={/document/XMLC_Params/XMLC_RequestSession}">link</a>
...
<form name="MainForm" action="{/document/Aliases/TrainingDLL}FormORGANIZATION">
	<input type="hidden" name="XMLC_RequestSession" value="{/document/XMLC_Params/XMLC_RequestSession}"/>
	...
</form>

Ainsi, le paramètre XMLC_RequestSession est géré spécifiquement par le framework pour être décodé et pour remplir la session de la requête suivante. Le contenu de la session est en même temps copié dans le Context pour être directement accessible. Le cycle peut alors continuer pour la prochaine requête.

Exemple d'utilisation d'une session XMLRAD

Nous allons montrer, sur le projet MyDemo que vous avez pu créer en suivant l'article XMLRAD: premier pas, comment utiliser les sessions XMLRAD.

Dans votre XMLService ListORGANIZATION, nous allons rajouter une instruction Assign dans le XMLGram. Nous la nommons Session.

Image non disponible

Même si une instruction Assign existe déjà pour les Params, il est préférable de séparer ce qui est pour ajouter des paramètres dans l'OutpuDoc et la gestion de la session.

Comme destination nous choisissons Session et le nom du paramètre MyParam. Nous n'allons pas spécifier de source mais mettre directement en constante dans la colonne Value avec la valeur MyValue.

Image non disponible

La session XMLC_RequestSession est donc automatiquement calculée dans les XMLC_Params. Pour transmettre la session à la page suivante il nous faut rajouter un paramètre HTTP XMLC_RequestSession contenant la valeur de l'OutputDoc. Nous allons donc dans le XSL de ListORGANIZATION pour rajouter sur lien le paramètre XMLC_RequestSession.

Image non disponible
XSL
Sélectionnez

<a href="{/document/Aliases/TrainingDLL}FormORGANIZATION?ORG_ID={ORG_ID}&XMLC_RequestSession={/document/XMLC_Params/XMLC_RequestSession}">link</a>

La session ainsi transmise au XMLService FormORGANIZATION va être décodée, copiée dans le Context et ajoutée dans l'OutputDoc. Dans le XSL de FormORGANIZATION on va donc pouvoir l'exploiter pour l'afficher.

Image non disponible
XSL
Sélectionnez

<xsl:value-of select="/document/XMLC_RequestSession/MyParam"/>
Image non disponible

Une fois le passage du XMLC_RequestSession mis en place, il suffit de rajouter des champs dans la session à n'importe quel moment grâce à l'instruction Assign et sans limitation. La maintenance de la session est ainsi facilitée.

Conclusion

Nous avons vu les différentes techniques qui permettent de stocker de l'information accessible de pages en pages: Cookies, paramètres HTTP et sessions avec leurs avantages et leurs inconvénients. Puis nous avons étudié ce que propose XMLRAD en terme de session.

Les sessions XMLRAD ont l'avantage d'avoir un stockage coté client et donc sans état coté serveur tout en étant non limité sur la quantité d'inormation stockée dans la session.