PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WEBDEV 25 → Fermeture de navigateur et fermeture de session
Fermeture de navigateur et fermeture de session
Started by Naimo, May, 17 2019 1:48 PM - 10 replies
Posted on May, 17 2019 - 1:48 PM
Bonjour ,

J'ai un petit soucis dans mon projet Webdev.
Si un utilisateur se connecte à mon application Webdev puis il ferme le navigateur via la croix, la session reste connecté côté serveur et donc consomme des ressources mémoire.

Si l'utilisateur ferme le navigateur via la croix et non pas via le bouton quitter, le code de fermeture de projet ne sera pas exécuté (FinProgramme()).

Y a-t-il une solution pour fermer la session qu'on l'utilisateur ferme le navigateur à travers la croix du navigateur ?

un autre soucis, si l'utilisateur clique sur le bouton droit et ouvre une page dans un nouvel onglet et essaye de travailler sur des pages différentes (par exemple devis et facture). Quand il fait une action sur la deuxième page (facture), la première page (devis) sera aussi renvoyé vers la deuxième page ouverte (le deux pages devient facture).
y a-t-il une solution pour éviter cela ?
Remarque : l'utilisateur a le droit d'ouvrir plus qu'une seule session.

Merci
Posted on May, 20 2019 - 9:14 AM
Bonjour,

je besoin d'aide sur ce sujet SVP.

Merci
Registered member
1,316 messages
Popularité : +3 (3 votes)
Posted on May, 20 2019 - 10:04 AM
Bonjour,

Pour ton premier point, c'est un sujet récurrent en effet, la fermeture du navigateur ne ferme pas la session serveur.
Le mieux est de définir coté serveur, une durée de session relativement courte ( quelques minutes) et de définir dans chaque page, un timer navigateur plus petit que le temps de durée de vie de la session.
Ce timer va effectuer un appel ajax asynchrone au serveur dans le but de maintenir la session active. Ainsi, une fois le navigateur fermé, le timer ne sera plus appelé et la session va se couper d'elle même.

Pour le 2eme point, le fait d'ouvrir dans un autre onglet de cette maniere, fait qu'on reste sur la meme session. Du coup on se retrouve avec 2 onglets, sur la meme session. Du coup le comportement que tu observe est normal mais dangeureux si tu ne gère pas bien la désynchronisation (cf https://doc.pcsoft.fr/?1012010)
Si l'utilisateur souhaite avoir 2 onglets il doit se connecter 2 fois.

Ou alors il faut passer en mode AWP pour pouvoir ouvrir autant de fenetre que tu veux (mais il n'y a plus de sessions du coup et la manière de developper ce genre de site n'est plus du tout la meme ! et je ne te la conseille pas pour un outil de devis/facture)
Message modified, May, 20 2019 - 10:05 AM
Posted on May, 20 2019 - 11:36 AM
Merci pour votre réponse,

-Oui j'ai déjà utilisé la solution de timer, mais ce n'est pas efficace parce que le timer parfois ne s'exécute pas si on a un traitement serveur qui s'exécute et qui prend beaucoup de temps (par exemple une procédure stocké, manipulation d'une grande requête ...) dans ce cas on peut perdre la session pendant l'exécution de la requête ou procédure ..

-Bon le but d'utiliser les onglets c'est de ne pas ouvrir des autres sessions par le même utilisateur et donc moins de consommation de ressources.
J'ai compris ce que tu veux dire. Dans ce cas on'a pas une autre solution que de permettre aux utilisateurs d'ouvrir plusieurs sessions en même temps.

Merci pour votre aide François
Registered member
1,316 messages
Popularité : +3 (3 votes)
Posted on May, 20 2019 - 11:51 AM
Naimo a écrit :
Merci pour votre réponse,

-Oui j'ai déjà utilisé la solution de timer, mais ce n'est pas efficace parce que le timer parfois ne s'exécute pas si on a un traitement serveur qui s'exécute et qui prend beaucoup de temps (par exemple une procédure stocké, manipulation d'une grande requête ...) dans ce cas on peut perdre la session pendant l'exécution de la requête ou procédure ..

-Bon le but d'utiliser les onglets c'est de ne pas ouvrir des autres sessions par le même utilisateur et donc moins de consommation de ressources.
J'ai compris ce que tu veux dire. Dans ce cas on'a pas une autre solution que de permettre aux utilisateurs d'ouvrir plusieurs sessions en même temps.

Merci pour votre aide François



1) Dans ce cas il suffit d'augmenter le temps de survie en fonction de ca. De toute façon, toute session a une durée de vie limitée.. avec ou sans timer si le traitement est trop long, on perd la session.

2) Si vous devez chasser les sessions "mortes" en permanence.. c'est peut etre aussi que votre serveur n'est pas (plus) dimensionné au besoin ? il est peut être temps de le faire évoluer ?
Posted on May, 20 2019 - 12:10 PM
-Oui effectivement j'ai augmenté la durée d'une session jusqu'au 30 min.

-Le timer attend la fin d'exécution de traitement serveur pour s'exécuter et parfois il ne s'exécute jamais ..

-Bon la configuration de serveur est bonne (32 G mémoire vive), mais parfois les nombres des utilisateurs connecté dépasse le 175 c'est pour ça.
Posted on June, 26 2019 - 5:31 PM
-j'ai utilisé les cookie (CookieEcrit, CookieLit) pour bloquer l'ouverture de plusieurs sessions par le même internaute

( l'ajout d'un table contient le valeur sauvegarder dans les cookies de site )

Si l'internaute essaye d'ouvrir une autre session,si le valeur stocké dans les cookies est déjà existe dans la base, il lui affiche un message si non il se connecte et quand il quitte le site le valeur de cookie sera effacer de la base.

Merci
Registered member
149 messages
Posted on June, 29 2019 - 11:09 PM
Bonjour Naimo,
Peux-tu m'expliquer comment tu as fait pour gérer avec les cookies car j'ai aussi le pb et même avec les cookies je n'ai pas un résultat parfait c'est chiant.

Merci à toi
Registered member
265 messages
Posted on July, 02 2019 - 1:39 PM
1 - Activer dans Webdev au niveau du projet "maintenir les sessions ouvertes automatiquement"
2 - Dans l'administrateur Webdev, mettre des sessions à 3min max avant déconnexion pour inactivité
3 - Remarque : l'utilisateur a le droit d'ouvrir plus qu'une seule session. < si une seule session il faut jouer avec le "recyclage de l'ip dans l'administrateur".
4 - Jouer avec les messages d'erreur webdev pour relancer le site automatiquement en cas de déco de la personne

Utiliser le "stockage local" plutôt que les cookies.

Oui j'ai déjà utilisé la solution de timer, mais ce n'est pas efficace parce que le timer parfois ne s'exécute pas si on a un traitement serveur


Faut faire un timer navigateur qui via un appel ajaxAsynchrone met un booléen à vrai, qu'il y ait ou non un traitement server qui tourne ne pose aucun souci, c'est la méthode que j'utilisais par le passé.

Jamais eu de soucis à cause des gens utilisant la fermeture du navigateur ;)
Bon dev

PS : On peut aussi s'inspirer du monde des jeux vidéo et s'amuser avec des sockets ^^
Posted on August, 11 2020 - 2:37 PM
Bonjour,
Tu créés une procédure serveur globale avec FinProgramme(Vrai) et tu la mets en ajax

PROCEDURE Unload_Session()
FinProgramme(Vrai)

et dans la partie déchargement (unload) de la page tu fais AJAXExécute(Unload_Session)

et ça règlera le problème
Registered member
1,316 messages
Popularité : +3 (3 votes)
Posted on August, 19 2020 - 10:15 AM
Bonjour Carlos,

Sur quelle page tu mets ca ?
Je ne vois pas comment mettre en place ton idée.

Le but étant de "tracer" la fermeture du navigateur.. lors de la fermeture, aucun code n'est executé.
Et meme si c'etait le cas, on devrait mettre ca dans toutes les pages, mais ca tuerais les sessions a chaque unload .. et ce n'est pas le but recherché.