Problème au niveau de ma Session_end dans mon Global.asax

Manu94600 Messages postés 107 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 20 février 2008 - 28 mars 2006 à 14:37
Manu94600 Messages postés 107 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 20 février 2008 - 28 mars 2006 à 23:45
Salut à tous,

Je cherche quelqu'un qui puisse m'indiquer mon erreur.
Alors j'ai une application asp.net en C#.

Je cherche à compter combien d'utilisateur sont sur le site actuellement. Donc pour cela j'utilise le Global.asax

voici mon code :

protected void Application_Start(Object sender, EventArgs e)
{
Application["nbUser"] = 0;
}

protected void Session_Start(Object sender, EventArgs e)
{
Application.Lock();
Application["nbUser"] = Convert.ToInt32(Application["nbUser"]) + 1;
Application.UnLock();
}

protected void Session_End(Object sender, EventArgs e)
{
Application.Lock();
Application["nbUser"] = Convert.ToInt32(Application["nbUser"]) - 1;
Application.UnLock();
}

Coté WinForm, j'ai dans la methode Load :

Response.Write(Application["nbUser"]);

Donc quand j'exécute l'application, j'ai une première page qui affiche 1.
J'ouvre donc une autre page et il m'affiche 2 (normal car c'est une deuxième session).

Mais mon problème c'est que dans la première page, il faut que je rafraichisse la page pour qu'il affiche 2.
Donc je voudrais savoir si quelqu'un aurai une solution ou tout simplement me donner des petits tips :) pour me permettre d'effectuer des recherches.

Et j'ai un autre problème, c'est que lorsque je ferme une fenetre dans l'autre fenetre le chiffre reste à 2. Et ceci meme en réactualisant la fenetre.

Merci pour m'aider.

Manu

4 réponses

tikrimi Messages postés 192 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 9 mars 2007 1
28 mars 2006 à 15:14
Bonjour,

Pour ton premier problème, tu as trouvé tout seul la solution : oui il faut rafraichir ta page.
Le seul moyen de rafraichir une page, c'est du javascript... tu peux éventuelement te servir d'Ajax pour ne rafraichir que la partie de tapage qui comporte l'affichage du nombre de connectés.
Pour ton deuxième problème, il n'y a en fait pas de problème : quand tu ferme ton navigateur, tu n'envoie aucune information au serveur comme quoi tu quitte la session (tu ne fais que fermer ton navigateur). Ta méthode Session_End ne sera appelée que si l'utilisateur ne donne pas signe de vie avant le timeout de ta session (qu'il ferme ou non son navigateur) (là encore le sujet et vaste car il existe plusieurs méthodes pour gérer les sessions en ASP.NET).
Si tu veux que ta session se ferme quand tu fermes ta pages... à toi d'intercepter l'évenement de fermeture de ta page puis de faire le traitement necessaire.

TiK - MCAD.NET
http://www.objectif-services.com
http://www.ultimecms.com
0
Manu94600 Messages postés 107 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 20 février 2008
28 mars 2006 à 15:25
Tout d'abord merci de m'aider.

Pourrais tu me donner des pistes concernant ajax, je connais pas du tout comment ça marche et surtout par rapport à mon problème.

Pour mon deuxieme probleme, j'avais pensé faire un : Session.Abandon(); dans l'évènement Page_UnLoad()
Mais le problème c'est que quand on fait une actualisation de la page, le Page_Unload() est appelé, je crois. Donc je sais pas du tout comment faire.

Merci pour ton aide.

Manu
0
tikrimi Messages postés 192 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 9 mars 2007 1
28 mars 2006 à 21:15
Bonjour,

Je crois que je ne vais pas pouvoir t'aider beaucoup plus.
Pour ce qui est de l'Ajax, je ne suis pas un grand spécialiste, mais quand j'ai besoin "d'un peu" d'Ajax, j'utilise la librairie suivante : http://ajax.schwarz-interactive.de/csharpsample/default.aspx (dans les sources de ce site tu trouveras aussi des exemple). Il y a par contre dans ce forum des grands spécialistes d'Ajax (je ne dénomcerai personne ;-) ).
Pour la fermeture de ton navigateur, c'est du coté du JavaScript qu'il faut aller voir (événément de fermeture de ton navigateur). Mais cela ne va solutionner qu'une partie de ton problème... quand un utilisateur va quitter ton site en entrant une nouvelle url, sa session va continuer d'exister jusqu'àu timeout.
Autre chose, si tu arrives a décrémenter ton compteur sur la fermeture du navigateur.... à l'expriration rééle de la session la methode Session_End sera appelée... tu va te retrouver avec un nombre négatif d'utilisateurs (il va faloir que tu gères un ID de seesion).


Enfin bref... a moins que tu sois dans l'absolue necessité de connaitre exactement le nombre d'utilisateurs sur ton site à l'instant t, je te conseille de gérer tes sessios en "standard"

TiK - MCAD.NET
http://www.objectif-services.com
http://www.ultimecms.com
0
Manu94600 Messages postés 107 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 20 février 2008
28 mars 2006 à 23:45
Forcement j'ai besoin de connaitre le nombre d'utilisateurs qui sont connectés. Car en fait je suis débutant en asp.net et je voudrais essayer, j'ai bien dit essayer :), de faire un chat en aspx :).

Je sais qu'il en existe des tas mes voilà j'aime m'entrainer à faire des choses que je connais pas :). (C'est comme ça qu'on apprend :))
Et donc pour cela il faut que je sache qui est connecté ou pas. Et donc du coup il faut que je détermine quand l'utilisateur ferme ça session ou quand il quitte tout simplement la page par fermeture ou encore même quand il part sur un autre site.

Merci quand même.

Je vais me diriger vers le JavaScript mais j'y connais pas plus :).

Manu
0
Rejoignez-nous