IIS se mélange les crayons ?

SuperBouly Messages postés 410 Date d'inscription dimanche 1 février 2004 Statut Membre Dernière intervention 8 mai 2010 - 25 nov. 2005 à 16:34
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 - 26 nov. 2005 à 09:43
bonjour,

Voilà qu'il m'arrive un nouveau et curieux problème :
Je travaille sur VS2003 ASP.Net VB


J'ai mon application qui détecte l'identité d'un utilisateur grâce à un cookie.
Dans la page d'entrée, l'application lit le cookie et ses différentes variables.


Celles-ci sont stockées dans une variable de Session :
Session("Identite")=Ident où ident est un arraylist ( 4 items)


A l'ouverture s'écrit "Bonjour Mr " & Session("Identite")(0) Parfait.
Dans le déroulement des pages tout va bien et je peux détecter les droits d'un utilisateur avec
if Session("Identite")(2) >1 then etc... Encore une fois ça marche bien.


Problème : je simule dans un petit réseau 2 utilisateurs, et paf, ils se mélangent les identités.!!!
J'ai essayé pleins de pistes, paramètres du web.config, J'écris Session.SessionID en haut de chaque page, tout est en ordre.
Extinction des fireWall, antivirus etc... tout !
J'ai déjà des applications qui tournent en ligne, je n'ai jamais vu ça !
AU SECOURS, Qqn a une idée ?


Merci @+ Gilles

8 réponses

jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
25 nov. 2005 à 16:47
Bonjour, je ne comprend pas pourquoi tu passe un arraylist pourquoi pas passer une instance d'un objet ? ensuite je ne sais pas trop ce que t'as fait, mais c'est pas normal s'il y a changement des variables de sessions :s tu détecte l'autorisation ou ?


<HR>
Cyril - MVS - MCP ASP
0
SuperBouly Messages postés 410 Date d'inscription dimanche 1 février 2004 Statut Membre Dernière intervention 8 mai 2010
25 nov. 2005 à 17:40
En fait, dès la premiere page, l'applic execute une fonction qui lit le cookie : elle lit un numéro d'abonné et un passe. Ensuite, la fonction lit la base de données sur la ligne de l'abonné . Elle lit les caractéristiques de l'abonné et sort un tableau des différentes valeurs , stockées alors dans un arraylist que j'appelle "ident"
Ensuite, pour pouvoir accèder à ces valeurs tout au long de la consultation des pages, j'écris : Session("Identite")=ident. Ma variable de session est donc un tableau de valeurs Session("Identite")(0), Session("Identite")(1), Session("Identite")(2), etc...

Ce doit être là que le bât blesse... car le bug arrive quand je retourne sur la premiere page justement. la fonction ident doit garder de mauvaises valeurs, celles d'un visiteur l'ayant executé entre temps...?
Bon, je vais voir ça
Dis moi quand même si ma façon de faire est correcte ou nulle. Je ne vois pas bien ce que tu entends par " passer une instance d'un objet "
Merci d'avoir répondu si vite
@+
Gilles
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
25 nov. 2005 à 17:47
public class Personne
property Name as string
property authorization as intgeer
end class

puis dans ta page, tu fais

dim p as new Personne()
p.truc = toto

session('truc') = p

puis ensuite pour recuperer le name du user tu fais

ctype(session('truc'), Personne).Name, ca ferait un code plus propre mais je pense pas que le problème soit la ... dans la premiere page, avant d'ecrire dans tes variables sessions regarde si tu n'as pas deja quelque chose dedans ca evitera peut etre des problèmes :p


<HR>
Cyril - MVS - MCP ASP
0
SuperBouly Messages postés 410 Date d'inscription dimanche 1 février 2004 Statut Membre Dernière intervention 8 mai 2010
25 nov. 2005 à 18:37
Effectivement tu as bien raison, Je note le code, il faut que je programme + propre.
Mais oui, le pb semble ailleurs, dans la maniere meme de programmer:

En fait, si je mets un point d'arret sur la page d'entrée, sur
Session("Identite")=ident, j'hallucine :
Le premier client s'arrete sur le point, part dans le module , execute ident et ressort avec les bonnes valeurs.
Je démarre un autre client dans le réseau, et il bloque aussi ! (depuis quand les autres clients bloquent de debbuger de VS ?)
Là, je vois Session("Identite") qui vient se charger des autres valeurs (l'autre user) !!
Bien entendu quant le premier client revient chercher Session("Identite") , il prend les mauvaises !
Session("Identite") se comporte comme si c'était une variable d'application, commune à tous les clients ! J'ai donc rien compris aux variables de session ??
je me trompe ? ?
@+
Gilles
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
25 nov. 2005 à 20:01
Si tu met juste un integer ou string dans ta variable session ca fait la meme chose ?

pas la peine d'ouvrir une page à partir d'un autre poste, si tu lances 2 IE tu lanceras 2 sessions ;)


<HR>
Cyril - MVS - MCP ASP
0
SuperBouly Messages postés 410 Date d'inscription dimanche 1 février 2004 Statut Membre Dernière intervention 8 mai 2010
25 nov. 2005 à 22:26
J'ai relevé une erreur de casse sur la variable de session... eh non, c'était pas ça !
Bon, j'ai mis une autre fonction simple en parallèle à la première. D'abord avec un string, elle marche.
Puis avec un tableau de 2 strings, puis avec desdes variables semblables, puis la fonction dans un module externe...
C'est écoeurant, elle marche, les sessions sont différenciées !
pourtant, les résultats s'inscrivent côte à côte, un bon, l'autre mauvais, j'ai dit é-coeu-rant ...J'en conclus que c'est ma fonction qui scratche qqpart, il doit y avoir une évidence, comme souvent.
Si je trouve quelquechose d'intéressant à dire dessus, je ne manquerai pas d'en faire part!
Pour l'instant, on verra demain matin, merci de m'avoir aidé à décanter le pb.
@+
Gilles
0
SuperBouly Messages postés 410 Date d'inscription dimanche 1 février 2004 Statut Membre Dernière intervention 8 mai 2010
26 nov. 2005 à 09:19
Alors voilà j'ai enfin trouvé : c'est évidemment tout bête, mais...

La variable de session était Session("Identite").
Je faisais Session("Identite")= FonctionRech () et cette fonction, située dans un module, sortait un tableau "ident" contenant les caractéristiques de l'abonné-visiteur.

J'avais déclaré "ident" en haut de page du module et non apres la déclaration de fonction.

Intuitivement, je comprends, mais je ne vois pas le mécanisme qui entraine la confusion des variables de session, car le programme n'évoque "ident" qu'à cet endroit, donc le fait qu'un autre user le change ne devrait pas influer, car le premier user ne repasse pas par
Session("Identite")= ...
Je manque cruellement de bases théoriques ! tu as une idée?
En tout cas dès aujourd'hui, j'implémente, enfin j'essaie
@+ gilles
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
26 nov. 2005 à 09:43
oula :p ce matin j'ai du mal avec le francais, t'aurais pas un peu de VB/C#, je crois que je comprendrais beaucoup plus facilement :)


<HR>
Cyril - MVS - MCP ASP
0
Rejoignez-nous