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 |
Session
Historique
Release | Modifications |
---|---|
20 R5 | Prise en charge des sessions utilisateurs distants et procédures stockées |
18 R6 | Ajout |
Session : 4D.Session
Paramètres | Type | Description | |
---|---|---|---|
Résultat | 4D.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 :
- une session web (lorsque les sessions évolutives sont activées),
- une session de client distant,
- la session des procédures stockées.
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
, etOn 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
etOn 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
etOn 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
, etOn 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
.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
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
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.
Vous pouvez utiliser cette propriété pour obtenir l'objet storage
d'une session grâce à la commande Session storage by ID
.
.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.
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é | 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 | ID persistant de la session |
.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.
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
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()
. - 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.