Gestion des sessions côté serveur

De RAD Studio
Aller à : navigation, rechercher

Remonter à Développement d'applications DataSnap


Quand un client se connecte à un serveur DataSnap, une session est créée. Cette session est représentée par une sous-classe ou une instance de TDSSession . La classe TDSAuthSession étend TDSSession et est elle-même sous-classée (TDSRESTSession, TDSTCPSession, TDSTunnelSession). Ces instances contiennent une instance de TDSCustomAuthenticationManager et permettent les contrôles d'autorisation.

Cycle de vie d'une session

Définition de SessionTimeout

Pour les connexions TSQLConnection avec un serveur DataSnap par TCP ou HTTP, la session se termine seulement quand la connexion est fermée. Pour les connexions TDSRESTConnection, la durée de vie d'une session peut être contrôlée par la propriété SessionTimeout exposée par la classe TDSHTTPServerTransport ou TDSHTTPServer. Par exemple, le composant TDSHTTPService publie cette propriété, comme le fait TDSHTTPWebDispatcher. La valeur, définie en millisecondes, représente la durée d'inactivité autorisée pour une session avant que celle-ci n'expire. Chaque fois qu'un client émet une requête au serveur en fournissant son ID de session, la session est marquée comme active à cet instant, et l'horloge est réinitialisée au moment où la session expire.

Fermeture d'une session

Pour fermer une session, vous devez connaître le SessionId (réellement, TDSSession.Name). Pour fermer la session, appelez simplement :

TDSSessionManager.Instance.CloseSession(SessionId);

Obtention de la session du thread en cours

Par exemple, vous pouvez obtenir la session du thread en cours depuis une méthode serveur. Vous obtiendrez ainsi des informations utiles concernant l'utilisateur ayant émis la requête en cours. Pour ce faire, utilisez le code suivant :

Session := TDSSessionManager.GetThreadSession;

Ecoute de la création et de l'expiration des sessions

Vous pouvez enregistrer un événement avec le TDSSessionManager, qui sera notifié quand de nouvelles sessions sont créées et quand des anciennes sessions expirent. Pour ce faire, utilisez le code suivant :

TDSSessionManager.Instance.AddSessionEvent(
  procedure(Sender: TObject;
            const EventType: TDSSessionEventType;
            const Session: TDSSession)
  begin
    case EventType of
      SessionCreate:
        {The provided Session was just created.}
      SessionClose:
        {The provided Session has just been closed, either intentionally or it has expired.}
    end;
  end);

Si vous voulez retirer plus tard l'événement, stockez-le dans un champ, et appelez par la suite RemoveSessionEvent en passant l'événement en paramètre.

Données d'une session

Vous pouvez stocker des données dans une session. Les données sont stockées dans des paires clé / valeur, où la clé et la valeur sont des chaînes.

Stockage des données

Pour stocker des données dans une session, appelez PutData en lui passant la clé et la valeur à stocker.

Récupération des données

Pour voir si une valeur existe pour une clé spécifique, appelez HasData. Pour obtenir une valeur, appelez GetData en lui passant la clé en paramètre.

Retrait des données

Pour effacer une paire clé / valeur stockée dans les données d'une session, appelez RemoveData en lui passant la clé en paramètre.