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 :
- Session utilisateur Web : Les sessions utilisateur Web sont disponibles lorsque les sessions évolutives (scalable sessions) sont activées dans votre projet. Elles sont utilisées pour les connexions Web et REST, et peuvent se voir attribuer des privilèges.
- Session utilisateur client distant : Dans les applications client/serveur, les utilisateurs distants ont leurs propres sessions gérées sur le serveur.
- Session des procédures stockées : Toutes les procédures stockées exécutées sur le serveur partagent la même session utilisateur virtuelle.
La disponibilité des propriétés et des fonctions de 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 |
.clearPrivileges()
Historique
Release | Modifications |
---|---|
18 R6 | Ajout |
.clearPrivileges() : Boolean
Paramètres | Type | Description | |
---|---|---|---|
Résultat | Boolean | <- | True si l'exécution est réussie |
Description
This function does nothing and always returns True with remote client and stored procedure sessions.
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
Release | Modifications |
---|---|
18 R6 | Ajout |
.expirationDate : Text
Description
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
Release | Modifications |
---|---|
20 R6 | Ajout |
.getPrivileges() : Collection
Paramètres | Type | Description | |
---|---|---|---|
Résultat | Collection | <- | 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".
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
Release | Modifications |
---|---|
18 R6 | Ajout |
.hasPrivilege( privilege : Text ) : Boolean
Paramètres | Type | Description | |
---|---|---|---|
privilege | Text | -> | Nom du privilège à vérifier |
Résultat | Boolean | <- | 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
Release | Modifications |
---|---|
20 R5 | Ajout |
.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.
You can use this property to get the .storage
object of a session thanks to the Session storage
command.
.idleTimeout
Historique
Release | Modifications |
---|
|18 R6|Added|
.idleTimeout : Integer
Description
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
Release | Modifications |
---|---|
20 R5 | Ajout |
.info : Object
Description
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.
The .info
object is the same object as the one returned by the Process activity
command for remote client and stored procedure sessions.
L'objet .info
contient les propriétés suivantes:
Propriété | Type | Description |
---|---|---|
type | Text | Type de session : "remote" ou "storedProcedure" |
userName | Text | Nom d'utilisateur 4D (même valeur que .userName ) |
machineName | Text | Sessions distantes : nom de la machine distante. Session des procédures stockées : nom de la machine serveur |
systemUserName | Text | Sessions distantes : nom de la session système ouverte sur la machine distante. |
IPAddress | Text | Adresse IP de la machine distante |
hostType | Text | Type d'hôte : "windows" ou "mac" |
creationDateTime | Date ISO 8601 | Date et heure de création de la session |
state | Text | État de la session : "active", "postponed", "sleeping" |
ID | Text | UUID de session (même valeur que .id ) |
persistentID | Text | Remote sessions: Session's persistent ID |
.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
Release | Modifications |
---|---|
18 R6 | Ajout |
.isGuest() : Boolean
Paramètres | Type | Description | |
---|---|---|---|
Résultat | Boolean | <- | Vrai s'il s'agit d'une session Guest, sinon Faux |
Description
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
Release | Modifications |
---|---|
19 R8 | Prise en charge de la propriété "roles" dans settings |
18 R6 | Ajout |
.setPrivileges( privilege : Text ) : Boolean
.setPrivileges( privileges : Collection )
.setPrivileges( settings : Object ) : Boolean
Paramètres | Type | Description | |
---|---|---|---|
privilege | Text | -> | Nom de privilège |
privileges | Collection | -> | Collection de noms de privilèges |
settings | Object | -> | Objet contenant une propriété "privileges" (texte ou collection) |
Résultat | Boolean | <- | True si l'exécution est réussie |
Description
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é | Type | Description |
---|---|---|
privileges | Text ou Collection | |
roles | Text ou Collection | |
userName | Text | Nom d'utilisateur à associer à la session (optionnel) |
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
.storage
Historique
Release | Modifications |
---|---|
20 R5 | Prise en charge des sessions utilisateurs distants et procédures stockées |
18 R6 | Ajout |
.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.
You can get the .storage
property of a session using the Session storage
command.
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
Release | Modifications |
---|---|
20 R5 | Prise en charge des sessions utilisateurs distants et procédures stockées |
18 R6 | Ajout |
.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 fonctionsetPrivileges()
. - With remote and stored procedure sessions, this property returns the same user name as the
Current user
command.
Cette propriété est en lecture seule.