Sessions évolutives pour les applications web avancées

Traduit automatiquement de Deepl

De nos jours, les applications web sont des outils modernes essentiels. Les machines et les processeurs devenant de plus en plus puissants, vos applications web doivent constamment répondre aux exigences de performance. C’est pourquoi avec 4D v18 R6, le serveur Web 4D propose un nouveau type de session Web : la session Web évolutive.

Découvrons-en plus !

HDI : Sessions Web évolutives

Auparavant, vous étiez habitué à l’option de gestion automatique des sessions sur la page Web des paramètres de structure. Il était pratique de garder les données de la session en vie sur le serveur.

Bien que le serveur Web de 4D soit préemptif et puisse tirer parti de tous les cœurs disponibles pour répondre aux processus Web, chaque session (représentant le navigateur d’un utilisateur final) était gérée par un seul processus, de sorte que plusieurs demandes provenant simultanément de ce navigateur étaient traitées séquentiellement, l’une après l’autre.

Désormais, les sessions web évolutives sont capables de gérer plusieurs processus en mode préemptif. Cela signifie que les sessions Web évolutives peuvent traiter plusieurs demandes de l’agent utilisateur en même temps. Cela améliore considérablement les performances.

Et ce n’est pas tout ! Ces nouvelles sessions web évolutives peuvent partager des données entre ces processus.

travailler avec des sessions web évolutives

Vous voulez travailler avec les nouvelles sessions web évolutives? Rien de plus simple. Il suffit d’activer les nouveaux paramètres web et de démarrer votre serveur web.

Les sessions web évolutives sont gérées par un objet.

Une fois que vous avez activé le paramètre, vous pouvez gérer la session par le biais d’un objet. La commande new Session renvoie cet objet.

Il est disponible dans tout processus web déclenché par des balises 4D, des actions 4D, des fonctions REST (ORDA Data Model Classes) et des méthodes de bases de données telles que On Web Authentication / On Web Connection.

Grâce à cet objet, vous pouvez gérer de nombreux aspects de votre session web.

Voici un exemple de ce que vous verrez dans le débogueur :

blank

partager des données entre processus

Cet objet Session objet est accompagné d’une storage qui est un objet partagé. Vous pouvez stocker toutes les données que vous souhaitez partager entre les requêtes provenant de l’agent utilisateur sur la session dans la propriété storage propriété.

exemple

Dans cet exemple, nous avons une application CRM. Chaque vendeur gère son propre portefeuille de clients. La base de données contient deux classes de données liées : Clients et SalesPersons ( un vendeur a plusieurs clients).

blank

Supposons que votre serveur web soit lancé sur votre machine(IP) en utilisant un port HTTPS(port).

Lorsqu’un vendeur saisit l’URL IP:port/4DACTION/authenticate?userId=1 dans un navigateur Web, la méthode authenticate est appelée.

Les trois premiers clients du vendeur sont stockés dans la session. Voici le code de la méthode authenticate:


var
$indexUserId : Integer
var $userId: Integer
var $info : Object
var $userTop3 : cs.CustomersSelection
var $sales : cs.SalesPersonsEntity
ARRAY TEXT($anames; 0)
ARRAY TEXT ($avalues; 0)

WEB GET VARIABLES
($anames; $avalues)
$indexUserId :=Find in array($anames; "userId")
$userId :=Num($avalues{$indexUserId})
$sales :=ds.SalesPersons.query("userId = :1" ; $userId).first()
If ($sales#Null)
Use (Session.storage)
If (Session.storage.myTop3=Null)
$userTop3 :=$sales.customers.orderBy("totalPurchase desc").slice(0 ; 3)
Session .storage.myTop3:=$userTop3
End if
End use

end if
WEB SEND HTTP REDIRECT ("/sessionStorage.shtml")

Ensuite, ces trois premiers sont accessibles par toute requête provenant de l’agent utilisateur (par exemple, dans une page SHTML) :

<center><h3>Vos 3 principaux clients</h3></center>
<table class="table">
<!--#4DCODE
$i:=0
$myTop3:=Session.stockage.monTop3
-->
<tr><th>Nom</th><th>Total achat</th></tr>
<!--#4DLOOP ($i<$myTop3.length)-->
<tr>
<td ><!--#4DTEXT $myTop3[$i].name--></td>
<td ><center><!--#4DTEXT $myTop3[$i].totalPurchase--></center></td>
</tr>
<!--#4DEVAL $i:=$i+1-->
<!--#4DENDLOOP-->
</table>

Et voici le résultat :

blank

actions à venir avec la session

Nous travaillons sur une gestion précise des privilèges pour l’avenir. De sorte que vous serez en mesure d’accorder des accès + opérations sur les données en fonction des privilèges.

Pour l’instant, vous pouvez mettre les informations de l’utilisateur dans la session grâce à la fonction setPrivileges(). Cette fonction sera améliorée pour gérer plus d’actions pour les privilèges dans une prochaine version.

exemple

var $indexUserId dsSalesPersonsquery $userId: Integer
var $userId : Integer
var $sales : cs.SalesPersonsEntity
var $info : Object
ARRAY TEXT ($anames; 0)
ARRAY TEXT ($avalues; 0)
WEB GET VARIABLES ($anames; $avalues)
$indexUserId :=Find in array($anames; "userId")
$userId :=Num($avalues{$indexUserId})
$sales := xml-ph-0035@deepl.ifirst()
$info :=New object()
$info .userName:=$sales.firstname+ " "+$sales.lastname

Session .setPrivileges($info)

Vous pouvez donc personnaliser vos pages web en ajoutant quelque chose comme ceci :

<center>
<h3>
Hello <!--#4DEVAL Choose(Session.userName # "" ; Session.userName; "nobody")-->
</h3>
</center>

Voici le résultat :

blank

Comme vous avez pu le remarquer dans la capture d’écran du débogueur, les sessions web évolutives se ferment (timeout) après 60 minutes d’inactivité (c’est-à-dire qu’aucune requête ne sollicite la session).

Téléchargez l’IDH ci-dessus pour en découvrir davantage et rejoignez la discussion sur le forum 4D !

Avatar
- Product Owner - Marie-Sophie Landrieu-Yvert a rejoint l'équipe de 4D Product en tant que Product Owner en 2017. En tant que Product Owner, elle est en charge de rédiger les user stories puis de les traduire en spécifications fonctionnelles. Son rôle est également de s'assurer que l'implémentation de la fonctionnalité livrée répond au besoin du client.Marie-Sophie est diplômée de l'école d'ingénieur ESIGELEC et a commencé sa carrière en tant qu'ingénieur chez IBM en 1995. Elle a participé à divers projets (projets de maintenance ou de construction) et a travaillé en tant que développeur Cobol. Elle a ensuite travaillé en tant que concepteur UML et développeur Java. Dernièrement, ses principaux rôles étaient d'analyser et de rédiger des exigences fonctionnelles, de coordonner les équipes commerciales et de développement.