24 février 2015
publié par 
Les sites dynamiques conservent une session active sur le serveur qui les héberge, pour tous les internautes connectés. Ce mécanisme est déjà détaillé dans le billet suivant :

 

Un complément d'information sur ce thème est nécessaire. En effet une nouveauté de WEBDEV incluse à partir de la version 19, reposant sur une possibilité de HTML 5, apporte une nouvelle solution pour les sites qui doivent conserver une session constamment active sur le serveur. Si précédemment l'utilisation d'un timer pouvait s'imposer, il est maintenant possible de l'éviter.

 

Dans la description d'un projet une option "maintenir automatiquement les sessions ouvertes (uniquement HTML 5)" est proposée :

 

 

Avec l'option "maintenir automatiquement les sessions ouvertes (uniquement HTML 5)" au niveau du projet, les sessions sont maintenues actives tant que la communication avec le navigateur fonctionne, donc tant qu'une page du site est affichée dans le navigateur de l'internaute : cela éviter un timeout des sessions.

 

D'autre part les pages disposent d'une option "Rafraîchir les données de la page depuis le serveur" dans le volet "Détail" de la description :

 

 

L'option "Rafraîchir les données de la page depuis le serveur" permet d'envoyer depuis le code serveur des données vers le navigateur sans timer dans le navigateur. Un code Ajax serveur et un code navigateur sont automatiquement ajoutés dans la page :

 

 

Le code serveur est appelé automatiquement en boucle, en utilisant comme fréquence la "période de rafraîchissement" indiquée dans la description de la page. Il n'est plus nécessaire d'avoir d'une procédure navigateur appelée par Timer, pour faire appel à la fonction AjaxExécute). Par exemple le code serveur "Rafraîchissement des données" consulte une information de la base de données, et met à jour si besoin des champs de la page. Si une mise à jour est faite, le code navigateur "Après rafraîchissement" est appelé. Cela permet "côté navigateur", de pouvoir notifier l'utilisateur du site qu'une modification a été faite, par exemple avec un "toast" de notification (cf. ToastAffiche). Le code serveur "Rafraîchissement des données" peut également effectuer une action sans provoquer l'appel du code navigateur "Après rafraîchissement", il suffit pour cela de "RENVOYER Faux" à la fin du traitement.

 

A noter que l'administrateur de WEBDEV permet de voir l'activité provoquée par l'appel du code "Rafraîchissement des données : le délai "Inactif depuis" montré dans la liste des connexions au site (volet "Connexions" de l'administrateur), est remis à zéro à chaque appel automatique du code.
___________________________________

 

Ces options utilisent la technologie "Server-sent events" (SSE), qui permet à la session (côté serveur) d'initier la transmission de données vers le navigateur une fois que la connexion initiale a été mise en place.

 

Cette technologie permet de ne pas consommer de bande passante inutile avec un timer qui ferait des demandes "pour rien" au serveur. De plus sans timer "côté du navigateur" il n'y a pas d'activité de ce dernier, donc son utilisation du CPU est réduite. C'est donc particulièrement intéressant pour les sites visités depuis des smartphones ou tablettes : réduction de la consommation du forfait data, et de la batterie.

 

Attention, reposant sur HTML 5, l'utilisation de cette solution nécessite de vérifier au préalable que tous les utilisateurs du sites pourront en bénéficier. Certains navigateurs peuvent ne pas supporter ce mécanisme, certaines stratégies de sécurité et antivirus peuvent bloquer des protocoles.


Mise à jour 14/12/2020
Cette solution de maintien des sessions peut être pénalisante en terme de performances pour certains sites. C'est dépendant des navigateurs et de la gestion de la mémoire et des processus par le serveur et le serveur web. Cette solution doit donc être retenue au cas par cas, après validation par des tests de montée en charge.

 

Mise à jour 7/6/2021

L'expérience montre un support assez aléatoire de la technologie "Server-sent events" (SSE) par les navigateurs. Elle passe en version 26 en option de compatibilité :

Elle reste donc applicable lorsque vous maîtrisez les navigateurs utilisés, dans un intranet sécurisé par exemple, et si elle convient aux besoins du site. Dans le cas d'un site tout public, la solution Timer + appel Ajax sera dans le cas général à privilégier.

< Retour

4 commentaires

CONTOZ
04/12/2017 - 16:49 - Répondre
Bonjour, Il semblerait que cette méthode ne fonctionne pas avec Internet Explorer Version 11.0.9600.18837. J'ai mis 30 secondes de rafraîchissement comme dans l'exemple, et une timeout de session à 45 secondes. Cela fonctionne très bien sur Firefox, Google Chrome. En revanche, sur Internet Explorer, le rafraîchissement ne se fait pas, et donc au bout de 45 secondes d'inactivité, la session s'interrompt. Avez-vous des conseils pour régler ce problème ? Version WebDev 22, 22.0.131.0 : 30F220073h Merci d'avance.

Guillaume Bayle
04/12/2017 - 17:45 - Répondre
Bonjour, malheureusement IE11 n'est pas dans les navigateurs supportant ces possibilités (cf conditions d'utilisation de la page https://doc.pcsoft.fr/fr-FR/?2030067). Un maintient de session compatible avec les navigateurs anciens navigateurs impose un timer. Bons développements !

CONTOZ
05/12/2017 - 08:19 - Répondre
Bonjour, Merci beaucoup pour ces informations et aussi rapidement ! J'avais déjà la piste du timer mais j'ai au moins l'explication précise sur l'obligation d'utiliser un timer avec les anciens navigateurs. Encore merci !

EB
24/06/2021 - 17:06 - Répondre
Bonjour, Je confirme que le système de maintien de session peut causer d'énormes problèmes de performance dans certaines configurations. Nous avons eu le malheur de l'activer pour remplacer un système de maintien de session par timer qui fonctionnait depuis de nombreuses années sur un site applicatif en WebDev dynamique, sur un serveur Windows Server 2012, IIS 8. Dès 140-150 sessions concurrentes, d'énormes ralentissements pouvaient se faire ressentir. Nous avons eu toutes les peines du monde à comprendre ce qui se passait jusqu'à tomber sur ce billet et sa mise à jour du 14/12/2020. Nous avons désactivé le maintien de session pour revenir à notre système de timer, et tout est revenu à la normale, ouf ! Vu les conséquences potentiellement désastreuses de ce système, il faudrait mettre une mise en garde en rouge dans l'aide en ligne ! Cordialement.

Publier un commentaire : 
Votre adresse email ne sera pas publiée