Pertes de session [Résolu]

Messages postés
17
Date d'inscription
mardi 20 mai 2003
Dernière intervention
18 avril 2007
- 16 avril 2007 à 17:13 - Dernière réponse :
Messages postés
1
Date d'inscription
lundi 5 mars 2007
Dernière intervention
30 avril 2007
- 30 avril 2007 à 12:41
Bonjour à tous,

Voilà, je suis en train de créer une application Web APS.Net 2.0 avec langage VB et j'utilise de nombreuses sessions.

Mon problème est le suivant :

   J'ai un tableau contenant plusieurs colonnes la première est une colonne d'image bouton et la seconde est une colonne de bouton standard.
   Lorsque je clique sur un bouton image, j'arrive bien à la page demandé avec les données que je souhaitai de même qu'avec un bouton standard.

Mais lorsque je fais précédent sur le navigateur ou sur le bouton précédent que j'ai créé ("javascript:history.back()"), quand je suis sur la page appelé avec un bouton standard, je perd mes sessions ce qui n'est pas le cas lorsque je fais la même manipulation à partir de la page appelée par le bouton image.

Quelqu'un peut-il m'aider ?

Ps: je ne perd pas toutes mes sessions, seulement une qui contient une classe sachant que d'autres sessions (que je ne perd pas) contiennent aussi des classes.

[}:)]
Afficher la suite 

Votre réponse

18 réponses

Meilleure réponse
Messages postés
17
Date d'inscription
mardi 20 mai 2003
Dernière intervention
18 avril 2007
- 18 avril 2007 à 17:20
3
Merci
Les pertes de sessions peuvent être dûs à des contrôles images non initialisés.

Si vous charger des images dynamiquement il ne faut pas oublier de mettre quelque chose dans la propriété imageurl du contrôle même si c'est du genre N/A.

Ceci évitera de créer une erreur invisible dans le code de l'application.

[}:)]

Merci LeonDob 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de LeonDob
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Dernière intervention
13 octobre 2010
- 16 avril 2007 à 22:15
0
Merci
Bonsoir,

As tu réussis à identifier un peu mieux le problème ? ca le fait à chaque fois que tu utilises le bouton back ?  combien de temps s'écoulent entre l'execution de la page et le click sur le bouton back ? ce n'est pas un timeout normal ? Lorsque tu fais un back, es tu sur que la page se rafraichit ? il me semble que par défaut IE ne rafraichit pas la page ou qu'il y a un truc du genre

<hr />Cyril - MSP - MCTS ASP.net & SQL
Commenter la réponse de jesusonline
Messages postés
17
Date d'inscription
mardi 20 mai 2003
Dernière intervention
18 avril 2007
- 17 avril 2007 à 09:24
0
Merci
Bonjour,

Pour répondre plus précisément le problème survient tous le temps et pas seulement quand je fais précédent. J'ai testé en mettant un timeout plus long dans la balise suivante :

<

sessionStatemode="
InProc"
cookieless="
false"
timeout="
3600"
/>

Mais il n'y a aucun changement. J'ai vérifié aussi les autres sessions et elles sont toujours pleines et actives.
De même que la session où je perds des données. Lorsque je clique sur le bouton la page demandée arrive bien et ce charge correctement, à la fin du chargement de la page, toutes les sessions correspondent à ce dont j'ai besoin mais il suffit de rafraichir la page et une seule session est modifiée mais elle existe toujours. J'ai vérifié que je ne fesait aucune modification dessus ou sur l'objet que j'ai stocké à l'intérieur et c'est e cas, je m'en sers qu'en lecture à cet endroit.

Je sais que le temps de la sessions n'est pas dépassé du tout. Est ce parce que la page est un peu plus lourde ques les autres? pourtant elle s'affiche très rapidement.

[}:)]
Commenter la réponse de LeonDob
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Dernière intervention
13 octobre 2010
- 17 avril 2007 à 10:10
0
Merci
Fais tu des modifications au niveau de l'arborescence de ton site ? ajout/suppression de fichier ?

<hr />Cyril - MSP - MCTS ASP.net & SQL
Commenter la réponse de jesusonline
Messages postés
17
Date d'inscription
mardi 20 mai 2003
Dernière intervention
18 avril 2007
- 17 avril 2007 à 10:11
0
Merci
Pour Info,

Je ne modifie en aucune manière l'arborescence de mon site. Aucun ajout ou suppression de répertoire ou de fichier.

J'ai testé les pramètres de sessions avec les différents mode de sessionState mais cela n'a rien changé. J'ai changé le temps de Timeout et le résultat fut le même.

Y a-t-il une balise dans le code html qui casserai ma session? (je pense que si c'était le cas toutes les sessions seront impactées"

[}:)]
Commenter la réponse de LeonDob
Messages postés
17
Date d'inscription
mardi 20 mai 2003
Dernière intervention
18 avril 2007
- 17 avril 2007 à 10:29
0
Merci
Que je recharge m'a page, que je clique sur le bouton précédent du navigateur, que je clique sur le bouton précédent de mon control utilisateur, que je clique sur le bouton retour que j'ai mis en bas de page (celui ci va à la page précédente avec le code suivant response.redirect("~/page.aspx") se qui signifie qu'il recharge la page appeler) cela ne change en rien la modification de ma session qui ne perd pas toutes les données.

J'ai surement oublié de dire que dans la session c'est un objet de classe que je lui mets et pas seulement un paramètre genre integer.
Cet object contient des propriétés, des procédures, des fonctions, des collections, des accesseurs.
Cet object correspond à mon utilisateur. Si je perd cette objet de perd les données correspondant au rôle de mo  utilisateur dans l'ad, aux différentes pages dont il a accès.

Mon site est composer d'une page Maitre qui contient la mise en forme du site et un contrôle utilisateur qui varie selon l'utilisateur, des pages enfants avec des champs de formulaires et des gridview pour afficher une liste de données, etc......

Le chemin est le suivant :

accueil.aspx  -> listind.aspx  (Appel de la feuille en cliquant sur un bouton standard qui remplit une session avec un integer et qui renvoie avec un response.redirect à la feuille lstusine.aspx) -> lstusine.aspx
                    -> listind.aspx (Appel de la feuille en cliquant sur un image bouton qui remplit une session avec un integer et renvoie avec un response.redirect à la feuille lstcel.aspx) -> lstcel.aspx

Et après le chargement de ma page lstusine.aspx ma session contenant mon utilisateur est comme réinitialisée.
Et cela ne se produit pas quand j'accède à la page lstcel.aspx.

C'est là où le problème se pose!!!!!!!!

Pourquoi sur une page et pas sur l'autre???

[}:)]
Commenter la réponse de LeonDob
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Dernière intervention
13 octobre 2010
- 17 avril 2007 à 10:50
0
Merci
Essaye de regarder si le sessionID est toujours le meme entre tes deux appels (Trace.Warn(Session.SessionID))

est-ce que si tu met seulement un type simple genre int, le paramètre est conservé ? ta classe est-elle marqué avec l'attribut Serializable ?

Je ne vois pas encore d'autres explications, un problème de cookie ?

<hr />Cyril - MSP - MCTS ASP.net & SQL
Commenter la réponse de jesusonline
Messages postés
17
Date d'inscription
mardi 20 mai 2003
Dernière intervention
18 avril 2007
- 17 avril 2007 à 13:27
0
Merci
Je vais essayer ce que tu me dis.

J'ai essayé aussi de changer le nom de la session d'une page à une autre lorsque je clique sur le bouton mais le problème persiste.

(On va finir par l'avoir !!!!!!!)

[}:)]
Commenter la réponse de LeonDob
Messages postés
17
Date d'inscription
mardi 20 mai 2003
Dernière intervention
18 avril 2007
- 17 avril 2007 à 13:49
0
Merci
Le session.sessionID ne change pas.

Sachant que j'utilise la session de la façon suivante :

page 1 :
session.add("Uti", ClsUti) -> ClsUti étant une classe
session.add("Periode", XiPeriode) -> XiPeriode étant un integer

page 2 :
ClsUti = session.item("Uti")
XiPeriode = session("Periode")

Je pense qu'une utilisation comme celle ci-dessus est correcte.
Je ne vois pas ce qui peu clocher!!!!

Ma Classe n'est pas marqué en sérializable mais j'ai essayé en chgeant le paramètre et cela n'a rien changé.

J'ai l'impression qu'il y une erreur dans ma page, pas le code que j'ai écrit mais dans l'exécution.

[}:)]
Commenter la réponse de LeonDob
Messages postés
17
Date d'inscription
mardi 20 mai 2003
Dernière intervention
18 avril 2007
- 17 avril 2007 à 13:51
0
Merci
Oublie de ma part dans le message précédent : Oui un integer reste alors que les 3/4 des éléments de ma classe ont disparu.

Je retrouve les données de XIPeriode mais pas de ClsUti

[}:)]
Commenter la réponse de LeonDob
Messages postés
17
Date d'inscription
mardi 20 mai 2003
Dernière intervention
18 avril 2007
- 17 avril 2007 à 14:03
0
Merci
Maintenant je perds toutes les données de ma session, que ce soit un integer, une classe ou autre, je ne retrouve plus rien au rechargement de ma page tout est vide!

Y a-t-il un nombre de sessions maximum?

[}:)]
Commenter la réponse de LeonDob
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Dernière intervention
13 octobre 2010
- 17 avril 2007 à 16:03
0
Merci
quand tu perd ta session, est-ce que le sessionID est différent ?

es tu sur que le nom de la session est unique ? tu utilises quoi comme serveur ? cassini (celui intégré dans VS2005) ou IIS ? essaye de publier le site sur un vrai IIS (avec les options de debug à false & co) si avec ca tu identifies pas le problème je ne vois pas ce que tu peux faire de plus.

Mais si le integer "disparait" aussi de temps alors que la sessionID est constante alors y'a un gros problème quelque part :-p

<hr />Cyril - MSP - MCTS ASP.net & SQL
Commenter la réponse de jesusonline
Messages postés
17
Date d'inscription
mardi 20 mai 2003
Dernière intervention
18 avril 2007
- 17 avril 2007 à 16:18
0
Merci
Lorsque je perd ma session, le session ID est le meme, pour les infos materiels :

VS2005 avec IIS en localhost sur Win XP SP2.

Pour la solution, je crois que j'ai trouvé, j'y vais un peu à la barbare mais ceci à l'air de fonctionner. Je recréai la page point par point en testant régulièrement pour vois si cela fonctionne et pour le moment tout roule.

[}:)]
Commenter la réponse de LeonDob
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Dernière intervention
13 octobre 2010
- 17 avril 2007 à 17:05
0
Merci
mouais c'est pas vraiment une "solution" car y'a un risque qu'au final tout fonctionne sans savoir pourquoi ... mais bon c'est une solution prmis d'autres :p

en tout cas si tu trouves le problème je suis curieux de savoir.

bon courage.

<hr />Cyril - MSP - MCTS ASP.net & SQL
Commenter la réponse de jesusonline
Messages postés
17
Date d'inscription
mardi 20 mai 2003
Dernière intervention
18 avril 2007
- 17 avril 2007 à 17:34
0
Merci
Enfin le problème est résolu après 2 jours de recherche.
L'erreur de la perte de session était dù à une erreur dans mon chargement de tableau se trouvant dans cette page (listind.aspx).
Je remplis un tableau lignes par lignes et cellules par cellules en fonction d'un oracledatareader.

jusque là tout fonctionnait.

Dans la première colonne j'allais cherher des images en fonction des différentes info venant d'oracle en executant une seconde procédure oracle. Et c'est là ou se trouvait le problème! Même si l'erreur était gérée dans un try catch, les sessions était vidés s'il y avait une erreur. J'ai résolu le problème en mettant un enregistrement générique si il ne trouvait pas de chemin pour l'image.

Le fait de recréer la page m'a permis de trouver mon problème et maintenant je vais pouvoir continuer.

Merci de m'avoir consacré du temps.

La syntaxe suivante :
return iif(prmr.value is dbnull.value, "", prmr.value)
a été remplacée par :
return prmr.value

en gérant l'erreur sous oracle.

Pour résumer : une erreur mal gérée à générer une erreur!!!!!
En espérant être assez clair

Merci pour tout.

[}:)]
Commenter la réponse de LeonDob
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Dernière intervention
13 octobre 2010
- 17 avril 2007 à 22:42
0
Merci
et du coup ca faisait quoi si ta méthode retourne "" ? il déplacait une image ou ce genre de chose ? au final il y avait bien modification du file system de l'appli web ?

car la je ne vois pas pourquoi il perdrais la session, a moins qu'il manque une partie du code ...

en tout cas tout fonctionne normalement maintenant :-)

<hr />Cyril - MSP - MCTS ASP.net & SQL
Commenter la réponse de jesusonline
Messages postés
17
Date d'inscription
mardi 20 mai 2003
Dernière intervention
18 avril 2007
- 18 avril 2007 à 09:15
0
Merci
J'ai peut être manqué d'explication sur la feuille où se trouver le problème.

Cette feuille ce compose de la page maître puis d'un zone de formulaire avec une textbox en readonly (la donnée vient d'une session puis d'oracle) puis d'un dropdrowlist où les données viennent d'oracle avec autopostback et d'un calendar.

En dessous de ce formaulaire, un second dropdrowlist où l'autopostback n'est pas actif et enfin un tableau vide.

Je charge le tableau en fonction de l'utilisateur, du textbox et du calendar en allant chercher les données qui vont bien dans oracle par l'intermédiaire de fonctions.

Je ne modifie pas les images, je ne les déplacent pas non plus. Je récupère simplement le chemin de l'image qui est stocké dans oracle mais si oracle retourne une chaine vide, une erreur se produit!!!!! alors que je gère le fait que ce soit une chaine vide (bizarre je trouve). Je ne sais pas si c'ets un bug de VS ou si c'est un bug dans ma prog mais en tout cas c'est très génant.

Donc pour résoudre le problème je retourne 'N/A' à la place d'une chaine vide pour toutes les lignes où je n'ai pas d'images associées.

[}:)]
Commenter la réponse de LeonDob
Messages postés
1
Date d'inscription
lundi 5 mars 2007
Dernière intervention
30 avril 2007
- 30 avril 2007 à 12:41
0
Merci
Essaye un cast du genre XiPeriode = (int) session("Periode")

((°)|(°))
((_*_))
--------
Commenter la réponse de mohamoha85

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.