Lors de la création d'un projet Intraweb Delphi génère 3 unités :

Projet

  1. Unit1.pas sera notre formulaire d'accueil pour l'application
  2. UserSessionnit.pas est un datamodule. Une instance de ce datamodule est automatiquement créée pour chaque nouvelle session. C'est donc l'endroit idéal pour y poser les composants nécessaires, comme les connecteurs de bases de données. Ce datamodule est géré par Intraweb, il est créé au début de la session, et il est détruit lors de sa terminaison.
  3. ServerController.pas est une classe contenant les propriétés de notre serveur. Elle est aussi utile pour régler certains paramètres de la session, nous allons la voir pour la partie qui nous intéresse, nous aurons l'occasion d'en voir d'autres aspects lors des prochains billets.

L'unité ServerController.pas

Cette unité contient une classe TIWServerController qui hérite de TIWServerControllerBase. Cette classe publie quelques propriétés relatives à la gestion de la session utilisateur :

  • SessionTimeout : indique le temps pendant lequel la session reste active sans action de l'utilisateur. Passé ce temps ( d'inactivité donc) la session est automatiquement fermée et les objets qu'elle contient sont libérés. Si après ce temps l'utilisateur tente une action sur sa session, il obtiendra un message Atozed de fin de session, à moins que le développeur ait prévu d'intercepter cet évènement, en renseignant par exemple la propriété suivante.
  • TimeoutResponse : permet d'indiquer une instance d'un IWUrlResponder pour soit rediriger sur une page d'erreur un peu mieux habillée que la page standard fournie par Atozed, soit intercepter l'erreur avec un TIWURLResponderEvent et en codant l'évènement OnRequest de ce dernier.
  • OnNewSession : il s'agit d'un évènement se déclenchant lorsque l'utilisateur se connecte sur notre application.

cet évènement est d'ailleurs pré-codé par le wizard Intraweb :

 procedure TIWServerController.IWServerControllerBaseNewSession(
   ASession: TIWApplication; var VMainForm: TIWBaseForm);
 begin
   ASession.Data := TIWUserSession.Create(nil);
 end;

Dans cette méthode, il créé tout simplement l'instance du module de données associés à la session.

L'unite UserSessionUnit.pas

Il s'agit en fait d'un module de données classique. Comme nous venons de le voir, une instance de ce module est créée pour chaque session, et donc les objets posés sur ce module sont propres à la session en cours. L'utilisation des objets ou méthodes de ce module se fait très simplement à partir des différents formulaires, après avoir ajouté l'unité ServerController. Par exemple, en supposant que nous ayons déposé un TSQLQuery sur notre module, nous l'utiliserons ainsi dans les formulaires :

 UserSession.SQLQuery1.open;

UserSession est une fonction publiée dans l'unité ServerController, elle retourne l'instance du module de données de la session en cours. Effectivement, il faut bien faire attention à cela : la classe TIWUserSession (qui est notre module de données) ne doit jamais être instanciée manuellement, il faut TOUJOURS y accéder à l'aide de cette méthode du ServerController.

Voilà donc pour cette introduction à la gestion des sessions à l'aide d'Intraweb. J'espère qu'elle aura permis de démontrer l’extrême simplicité de ce mécanisme qui est parfois délicat à mettre en oeuvre sous d'autres plates-formes.