Aller au contenu principal
Version: 20 R6 BETA

Session

Les objets de session sont retournés par la commande Session. Ces objets fournissent au développeur une interface permettant de gérer la session utilisateur courante et d'exécuter des actions telles que le stockage de données contextuelles, le partage d'informations entre les process de la session, le lancement de process préemptifs liés à la session ou (uniquement pour le web) la gestion des privilèges.

Types de sessions

Trois types de sessions sont pris en charge par cette classe :

note

La disponibilité des propriétés et des fonctions dans l'objet Session dépend du type de session.

Sommaire

.clearPrivileges() : Boolean
supprime tous les privilèges associés à la session et retourne True si l'exécution a réussi
.expirationDate : Text
la date et l'heure d'expiration du cookie de session
.getPrivileges() : Collection
renvoie une collection contenant tous les noms de privilèges associés à la session
.hasPrivilege( privilege : Text ) : Boolean
renvoie True si le privilege est associé à la session, et False sinon
.id : Text
l'identifiant unique (UUID) de la session sur le serveur
.idleTimeout : Integer
le délai maximal d'inactivité de session (en minutes), au-delà duquel la session est automatiquement fermée par 4D
.info : Object
décrit la session du client distant ou de la procédure stockée sur le serveur
.isGuest() : Boolean
renvoie True si la session est une session Guest (c'est-à-dire qu'elle n'a aucun privilège)
.setPrivileges( privilege : Text ) : Boolean
.setPrivileges( privileges : Collection )
.setPrivileges( settings : Object ) : Boolean

associe le ou les privilège(s) et/ou rôle(s) défini(s) en paramètre à la session et renvoie True si l'exécution a réussi
.storage : Object
un objet partagé qui peut être utilisé pour stocker des informations disponibles pour tous les process de la session
.userName : Text
le nom d'utilisateur associé à la session

Session

Historique
ReleaseModifications
20 R5Prise en charge des sessions utilisateurs distants et procédures stockées
18 R6Ajout

Session : 4D.Session

ParamètresTypeDescription
Résultat4D.Session<-Objet session

Description

La commande Session retourne l'objet Session correspondant à la session utilisateur courante.

Selon le process à partir duquel la commande est appelée, la session utilisateur courante peut être :

Pour plus d'informations, voir le paragraphe Types de sessions.

Si la commande est appelée à partir d'un contexte non pris en charge (application mono-utilisateur, sessions évolutives désactivées...), elle retourne Null.

Sessions Web

L'objet Session des sessions web est disponible depuis n'importe quel process web :

  • Méthodes base On Web Authentication, On Web Connection, et On REST Authentication,
  • code traité par les balises 4D dans les pages semi-dynamiques (4DTEXT, 4DHTML, 4DEVAL, 4DSCRIPT/, 4DCODE)
  • méthodes projet avec l'attribut "Disponible via balises HTML et URLs 4D (4DACTION...)" et appelées via les urls 4DACTION/
  • méthodes base On Mobile App Authentication et On Mobile App Action pour les requêtes mobiles,
  • Fonctions ORDA appelées via des requêtes REST.

Pour plus d'informations sur les sessions utilisateur web, veuillez consulter la section Sessions web.

Sessions clients distants

L'objet Session des sessions client distants est disponible depuis :

  • Les méthodes projet qui ont l'attribut Exécuter sur serveur (elles sont exécutées dans le process jumeau du process client),
  • Les Triggers,
  • Les méthodes base On Server Open Connection et On Server Shutdown Connection.

Pour plus d'informations sur les sessions utilisateur distantes, veuillez vous référer au paragraphe Sessions utilisateur client distants.

Session des procédures stockées

Tous les process des procédures stockées partagent la même session d'utilisateur virtuel. L'objet Session des procédures stockées est disponible depuis :

  • Les méthodes appelées avec la commande Execute on server,
  • Les méthodes base On Server Startup, On Server Shutdown, On Backup Startup, On Backup Shutdown, et On System event.

Pour des informations sur la session d'utilisateur virtuel des procédures stockées, veuillez vous référer à la page 4D Server et langage 4D.

Exemple

Vous avez défini la méthode action_Session ayant l'attribut "Disponible via Balises HTML et URLs 4D". Vous appelez la méthode en saisissant l'URL suivant dans votre navigateur :

IP:port/4DACTION/action_Session
  //méthode action_Session
Case of
:(Session#Null)
If(Session.hasPrivilege("WebAdmin")) //appel de la fonction hasPrivilege
WEB SEND TEXT("4DACTION -- Session is WebAdmin")
Else
WEB SEND TEXT("4DACTION -- Session is not WebAdmin")
End if
Else
WEB SEND TEXT("4DACTION -- Sesion is null")
End case

Voir également

Session storage by ID

.clearPrivileges()

Historique
ReleaseModifications
18 R6Ajout

.clearPrivileges() : Boolean

ParamètresTypeDescription
RésultatBoolean<-True si l'exécution est réussie

Description

note

Cette fonction ne fait rien et retourne toujours False avec les sessions des clients distants et des procédures stockées.

La fonction .clearPrivileges() supprime tous les privilèges associés à la session et retourne True si l'exécution a réussi. En résultat, la session devient automatiquement une session Guest.

Exemple

//Invalider une session utilisateur web
var $isGuest : Boolean
var $isOK : Boolean

$isOK:=Session.clearPrivileges()
$isGuest:=Session.isGuest() //$isGuest est True

.expirationDate

Historique
ReleaseModifications
18 R6Ajout

.expirationDate : Text

Description

note

Cette propriété est uniquement disponible avec les sessions web.

La propriété .expirationDate contient la date et l'heure d'expiration du cookie de session. La valeur est exprimée sous forme de texte au format ISO 8601 : YYYY-MM-DDTHH:MM:SS.mmmZ.

Cette propriété est en lecture seule. Elle est automatiquement recalculée si la valeur de la propriété .idleTimeout est modifiée.

Exemple

var $expiration : Text
$expiration:=Session.expirationDate //ex : "2021-11-05T17:10:42Z"

.getPrivileges()

Historique
ReleaseModifications
20 R6Ajout

.getPrivileges() : Collection

ParamètresTypeDescription
RésultatCollection<-Collection de noms de privilèges (chaînes)

Description

La fonction .getPrivileges() renvoie une collection contenant tous les noms de privilèges associés à la session.

Avec une session de client distant ou de procédure stockée, cette fonction renvoie une collection ne contenant que "WebAdmin".

info

Les privilèges sont assignés à une Session en utilisant la fonction setPrivileges().

Exemple

Les rôles suivants roles.json ont été définis :

{
"privileges":[
{
"privilege":"simple",
"includes":[

]
},
{
"privilege":"medium",
"includes":[
"simple"
]
}
],
"roles":[
{
"role":"Medium",
"privileges":[
"medium"
]
}
],
"permissions":{
"allowed":[

]
}
}

Le rôle de la session est attribué dans une fonction de datastore authentify() :

  //Datastore Class

exposed Function authentify($role : Text) : Text
Session.clearPrivileges()
Session.setPrivileges({roles: $role})

En supposant que la fonction authentify() soit appelée avec le rôle "Medium" :

var $privileges : Collection
$privileges := Session.getPrivileges()
//$privileges: ["simple","medium"]

Voir également

.setPrivileges()
Permissions : Inspecter les privilèges de la session pour faciliter le débogage (article de blog)

.hasPrivilege()

Historique
ReleaseModifications
18 R6Ajout

.hasPrivilege( privilege : Text ) : Boolean

ParamètresTypeDescription
privilegeText->Nom du privilège à vérifier
RésultatBoolean<-Vrai si la session dispose du privilege, sinon Faux

Description

La fonction .hasPrivilege() renvoie True si le privilege est associé à la session, et False sinon.

Avec des sessions de client distant et de procédure stockée, cette fonction renvoie toujours True, quel que soit le privilege.

Exemple

Vous voulez vérifier si le privilège "WebAdmin" est associé à la session utilisateur web :

If (Session.hasPrivilege("WebAdmin"))
//Accès accordé, ne rien faire
Else
//Afficher une page d'authentification

End if

.id

Historique
ReleaseModifications
20 R5Ajout

.id : Text

Description

La propriété .id contient l'identifiant unique (UUID) de la session sur le serveur. Cette chaîne unique est automatiquement attribuée par le serveur à chaque session et vous permet d'identifier ses process.

tip

Vous pouvez utiliser cette propriété pour obtenir l'objet storage d'une session grâce à la commande Session storage by ID.

.idleTimeout

Historique
ReleaseModifications

|18 R6|Added|

.idleTimeout : Integer

Description

note

Cette propriété est uniquement disponible avec les sessions web.

La propriété .idleTimeout contient le délai maximal d'inactivité de session (en minutes), au-delà duquel la session est automatiquement fermée par 4D.

Si cette propriété n'est pas définie, sa valeur par défaut est 60 (1h).

Lorsque cette propriété est définie, la propriété .expirationDate est mise à jour en conséquence.

La valeur ne peut pas être < 60 ; si une valeur inférieure est définie, le timeout est élevé à 60.

Cette propriété est en lecture-écriture.

Exemple

If (Session.isGuest())
// La session Guest se ferme après 60 minutes d'inactivité
Session.idleTimeout:=60
Else
// Les autres sessions se ferment après 120 minutes d'inactivité
Session.idleTimeout:=120
End if

.info

Historique
ReleaseModifications
20 R5Ajout

.info : Object

Description

note

Cette propriété est uniquement disponible avec les sessions des procédures stockées et des client distants.

La propriété .info décrit la session du client distant ou de la procédure stockée sur le serveur.

L'objet .info est le même objet que celui renvoyé par la commande Get process activity pour les sessions des clients distants et des procédures stockées.

L'objet .info contient les propriétés suivantes:

PropriétéTypeDescription
typeTextType de session : "remote" ou "storedProcedure"
userNameTextNom d'utilisateur 4D (même valeur que .userName)
machineNameTextSessions distantes : nom de la machine distante. Session des procédures stockées : nom de la machine serveur
systemUserNameTextSessions distantes : nom de la session système ouverte sur la machine distante.
IPAddressTextAdresse IP de la machine distante
hostTypeTextType d'hôte : "windows" ou "mac"
creationDateTimeDate ISO 8601Date et heure de création de la session
stateTextÉtat de la session : "active", "postponed", "sleeping"
IDTextUUID de session (même valeur que .id)
persistentIDTextID persistant de la session
note

.info étant une propriété calculée, il est recommandé de l'appeler une fois et de la stocker dans une variable locale si vous souhaitez effectuer un traitement sur ses propriétés.

.isGuest()

Historique
ReleaseModifications
18 R6Ajout

.isGuest() : Boolean

ParamètresTypeDescription
RésultatBoolean<-Vrai s'il s'agit d'une session Guest, sinon Faux

Description

note

Cette fonction retourne toujours False avec les sessions des clients distants et des procédures stockées.

La fonction .isGuest() renvoie True si la session est une session Guest (c'est-à-dire qu'elle n'a aucun privilège).

Exemple

Dans la méthode base On Web Connection :

If (Session.isGuest())
//Faire quelque chose pour l'utilisateur invité
End if

.setPrivileges()

Historique
ReleaseModifications
19 R8Prise en charge de la propriété "roles" dans settings
18 R6Ajout

.setPrivileges( privilege : Text ) : Boolean
.setPrivileges( privileges : Collection )
.setPrivileges( settings : Object ) : Boolean

ParamètresTypeDescription
privilegeText->Nom de privilège
privilegesCollection->Collection de noms de privilèges
settingsObject->Objet contenant une propriété "privileges" (texte ou collection)
RésultatBoolean<-True si l'exécution est réussie

Description

note

Cette fonction ne fait rien et retourne toujours False avec les sessions des clients distants et des procédures stockées.

La fonction .setPrivileges() associe le ou les privilège(s) et/ou rôle(s) défini(s) en paramètre à la session et renvoie True si l'exécution a réussi.

  • Dans le paramètre privilege, passez une chaîne contenant un nom de privilège (ou plusieurs noms de privilèges séparés par des virgules).

  • Dans le paramètre privileges, passez une collection de chaînes contenant des noms de privilèges.

  • Dans le paramètre settings, passez un objet contenant les propriétés suivantes :

PropriétéTypeDescription
privilegesText ou Collection
  • Chaîne contenant un nom de privilège, ou
  • Collection de chaînes contenant des noms de privilèges
  • rolesText ou Collection
  • Chaîne contenant un rôle, ou
  • Collection de chaînes contenant des rôles
  • userNameTextNom d'utilisateur à associer à la session (optionnel)
    note

    Les privilèges et les rôles sont définis dans le fichier roles.json du projet. Pour plus d'informations, veuillez vous reporter à la section Privileges.

    Si la propriété privileges ou roles contient un nom qui n'est pas déclaré dans le fichier roles.json, il est ignoré.

    Par défaut lorsqu'aucun privilège ou rôle n'est associé à la session, la session est une session Guest.

    La propriété userName est accessible au niveau de l'objet session (lecture seulement).

    Exemple

    Dans une méthode d'authentification personnalisée, vous assignez le privilège "WebAdmin" à l'utilisateur :

    var $userOK : Boolean

    ... //Authentifier l'utilisateur

    If ($userOK) //L'utilisateur a été approuvé
    var $info : Object
    $info:=New object()
    $info.privileges:=New collection("WebAdmin")
    Session.setPrivileges($info)
    End if

    Voir également

    .getPrivileges()

    .storage

    Historique
    ReleaseModifications
    20 R5Prise en charge des sessions utilisateurs distants et procédures stockées
    18 R6Ajout

    .storage : Object

    Description

    La propriété .storage contient un objet partagé qui peut être utilisé pour stocker des informations disponibles pour tous les process de la session.

    Lorsqu'un objet Session est créé, la propriété .storage est vide. Puisqu'il s'agit d'un objet partagé, cette propriété sera disponible dans l'objet Storage du serveur.

    Tout comme l'objet Storage du serveur, la propriété .storage est toujours "single" : l'ajout d'un objet partagé ou d'une collection partagée à .storage ne crée pas de groupe partagé.

    Cette propriété est elle-même en lecture seulement mais elle retourne un objet en lecture-écriture.

    tip

    Vous pouvez obtenir la propriété .storage d'une session en utilisant la commande Session storage by ID.

    Exemple de session Web

    Vous voulez stocker l'adresse IP du client dans la propriété .storage. Vous pouvez écrire dans la méthode base On Web Authentication :

    If (Session.storage.clientIP=Null) //first access
    Use (Session.storage)
    Session.storage.clientIP:=New shared object("value"; $clientIP)
    End use
    End if

    Exemple de session distante

    Vous voulez partager des données entre les process de la même session :

    Use (Session.storage)
    Session.storage.settings:=New shared object("property"; $value; "property2"; $value2)
    End use

    .userName

    Historique
    ReleaseModifications
    20 R5Prise en charge des sessions utilisateurs distants et procédures stockées
    18 R6Ajout

    .userName : Text

    Description

    La propriété .userName contient le nom d'utilisateur associé à la session. Vous pouvez vous en servir pour identifier l'utilisateur dans votre code.

    • Avec les sessions web, cette propriété est une chaîne vide par défaut. Elle peut être définie via la propriété privileges de la fonction setPrivileges().
    • Avec les sessions distantes et des procédures stockées, cette propriété renvoie le même nom d'utilisateur que la commande Current user.

    Cette propriété est en lecture seule.