PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WEBDEV 2024 → Fermeture de navigateur et fermeture de session
Fermeture de navigateur et fermeture de session
Iniciado por Naimo, 17,may. 2019 13:48 - 13 respuestas
Publicado el 17,mayo 2019 - 13:48
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
Publicado el 20,mayo 2019 - 09:14
Bonjour,

je besoin d'aide sur ce sujet SVP.

Merci
Miembro registrado
1.623 mensajes
Popularité : +100 (114 votes)
Publicado el 20,mayo 2019 - 10:04
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)
Mensaje modificado, 20,mayo 2019 - 10:05
Publicado el 20,mayo 2019 - 11:36
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
Miembro registrado
1.623 mensajes
Popularité : +100 (114 votes)
Publicado el 20,mayo 2019 - 11:51
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 ?
Publicado el 20,mayo 2019 - 12:10
-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.
Publicado el 26,junio 2019 - 17:31
-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
Miembro registrado
179 mensajes
Popularité : +2 (4 votes)
Publicado el 29,junio 2019 - 23:09
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
Miembro registrado
324 mensajes
Popularité : +21 (51 votes)
Publicado el 02,julio 2019 - 13:39
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 ^^
Publicado el 11,agosto 2020 - 14:37
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
Miembro registrado
1.623 mensajes
Popularité : +100 (114 votes)
Publicado el 19,agosto 2020 - 10:15
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é.
Publicado el 06,enero 2021 - 19:59
Bonjour,

Je viens de tester sur un site de type session?

Cela ne fonctionne pas.

Merci
Publicado el 22,diciembre 2022 - 13:47
Je me permets de relancer le sujet pour savoir si quelqu'un a une solution
Publicado el 04,marzo 2024 - 10:47
Utilise SessionHeartBeatActive()