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 !
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 :
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).
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 :
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 :
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 !