[ASP]Compter le nombre de sessions

Dans ma grande lignée de threads mort-né je lance celui-ci, sans grands espoirs toutefois.

Je suis en train de faire un compteur de visites et j’aimerais faire un compteur du genre : “il y a X personnes connectées en ce moment au site”.

Précision je bosse en ASP/vbscript.
Je sais qu’il existe des solutions avec un global.asa bien foutu, mais ça ne me convient pas : je ne peux pas en créer un pour diverses raisons.
Mais bon j’ai eu une idée (oui ça m’arrive de temps à autres) : J’ouvre déjà une variable de Session quand un utilisateur passe sur la page d’accueil, l’idée est simple : il suffit de les compter, s’il y a 36 sessions ça veut dire qu’il y a 36 visiteurs en ce moment.
Le soucis c’est que je ne vois absolument pas comment les compter. Si quelqu’un connaît une fonction qui va bien ou éventuellement a une autre idée, je lui en serai infiniment reconnaissant.

Merci d’avance

PS : Si jamais je suis pas clair, dites le et je préciserai.

Sans avoir de global.asa, le gros problème que tu vas avoir de toute façon c’est pour savoir lorsqu’une session se termine, pour pouvoir décrémenter ton compteur.

Sinon, si tu peux générer un id de session (je ne me souviens plus si asp en propose un par défaut), alors tu peux créer une hashtable (objet Dictionnary en VBScript).

Tu stockes cet objet comme variable application, et pour les valeurs de ce dictionnaire, tu mets l’id de session comme clé et la date/heure de dernière action (en gros l’heure courante) pour valeur.

En faisant un nettoyage fréquemment (genre toutes les 5 minutes, supprimer les entrées de la hashtable pour les dates avec un délai d’inactivité de + de 5 minutes), tu peux avoir une liste “à peu près propre” des utilisateurs en ligne.

L’inconvénient c’est que ça sous-entend l’inclusion systématique dans tes pages d’un script qui va faire ces traitements (et actualiser la date de dernière action).

Ce que va faire le script en gros :

  1. Création de l’objet disctionnary dans les variables application s’il n’existe pas
  2. Vérification de l’existante d’une valeur pour la clé session actuelle
  3. Ajout ou mise à jour de la date de dernière action dans l’objet dictionnary
  4. Toutes les 5 minutes (je te laisse chercher l’algo), virer les éléments dont la date de dernière action est inférieure à Now() - 5 minutes
  5. Nombre de personnes connectées = nombre de valeurs dans l’objet dictionnary

Edit parce que j’ai peur de pas être super clair

Comme je l’ai dit je ne peux pas créer de global.asa.
En fait je bosse sur un intranet, chaque service de la boîte possède son site intranet mais son tous regroupés sous le même domaine, concrètement :

-Premier service : http://bidule.truc.com/service1
-Deuxieme service: http://bidule.truc.com/service2
-Troisième service: http://bidule.truc.com/service3
etc…

Dans ce cas de figure je suis sensé mettre le global.asa dans http://bidule.truc.com, or je ne peux pas parce que les compteurs sont indépendants entre services, d’où mon idée de compter les sessions avec une fonction.

Rien ne t’empeche de créer une application par répertoire virtuel, et de créer un global.asa dans chaque répertoire.

Tu vas, sous IIS, dans les propriétés de ton repertoire Service1, dans l’onglet Répertoire, et tu cliques sur le bouton “créer”.

PS : La solution que je t’ai donné fonctionne quand même sans global.asa, à condition d’utiliser un dictionnaire différent pour chaque sous répertoire.

Merci de ta réponse, je vais essayer tout ça.

[quote name=‘Ismar’ date=’ 23 Dec 2004, 16:28’]Comme je l’ai dit je ne peux pas créer de global.asa.
En fait je bosse sur un intranet, chaque service de la boîte possède son site intranet mais son tous regroupés sous le même domaine, concrètement :

-Premier service : http://bidule.truc.com/service1
-Deuxieme service: http://bidule.truc.com/service2
-Troisième service: http://bidule.truc.com/service3
etc…

Dans ce cas de figure je suis sensé mettre le global.asa dans http://bidule.truc.com, or je ne peux pas parce que les compteurs sont indépendants entre services, d’où mon idée de compter les sessions avec une fonction.
[right][post=“315923”]<{POST_SNAPBACK}>[/post][/right][/quote]

salut,

Justement j’utilise cette maniere de faire pour un site que l’on doit pouvoir utiliser dans une sous repertoire. je crée donc une application IIS sur le repertoire contenant mon site, mais le global.asa ne s’execute pas !
Par contre si je crée un repertoire virtuel au meme endroit portant le meme nom que mon repertoire contenant mon site … ben ca marche !
y’aurait-il un soucis avec la creation d’application IIS ?

PS: je tourne sous IIS 5 winXP Pro