2011-09-29 6 views
4

J'ai une solution qui comprend 2 projets et 2 fichiers de classe appelés par référence. Dans un de mes projets, j'ai du code dans Global.asax dans le bloc Session_Start qui charge quelques variables d'une base de données et les définit en variables de session. Si je mets un point d'arrêt dans Global.asax, je peux vérifier que les variables sont bien définies correctement.Variables de session ASP.NET C# étant perdues

Lorsque je référence les variables de session dans les classes de l'un de mes modules code-behind ou d'une classe dans mon projet, elles sont présentes. Mais si je les référence dans l'une des classes appelées par référence (une classe partagée, essentiellement), les variables de session sont toutes nulles. J'utilise HttpContext.Current.Session ["varName"] pour accéder aux variables d'une classe, comme d'habitude.

Y at-il autre chose que je dois considérer pour avoir accès à ces variables de session? Serait-ce peut-être un problème d'espace de noms?

+3

Eh bien, d'une « séparation des préoccupations » point de vue, il semble que le projet « autre » ne doit pas être au courant directement de l'environnement web. Pouvez-vous simplement transmettre les valeurs de la session dans l'autre projet qui sont nécessaires? – RQDQ

+0

Essayez: System.Web.HttpContext.Current.Session ["varName"]. En outre, n'oubliez pas à quelle étape du cycle de vie de la page ASP.NET vous essayez de lire la session, par exemple. Est-il possible que la session n'a pas encore été chargée au moment où vous essayez de le lire? –

+0

Moe - Je personnalise le logo qui apparaît sur l'écran de connexion en fonction de l'URL utilisée pour accéder au système. Quand je passe à travers, je place un point de rupture dans le global.asax et il s'arrête d'abord et les variables sont définies. Ensuite, le prochain point de rupture est lorsque mon module de connexion tente de charger le logo à partir de la base de données. Il appelle une procédure de cette classe partagée 'other' pour gérer le chargement de l'image et le nom de la base de données est null. Je suppose que je pourrais essayer de prendre la variable de session du module où il fonctionne et la passer à la méthode int de la classe qui charge l'image ... Je vais essayer ça. –

Répondre

3

J'ai eu le même problème avant, je continue à perdre les variables de ma session (bien que pas dans le même contexte que le vôtre). J'ai trouvé cet article utile pour mon numéro: ASP.NET Case Study: Lost session variables and appdomain recycles et PRB: Session Data Is Lost When You Use ASP.NET InProc Session State Mode. J'espère que cela pourrait vous aider aussi. À votre santé!

+0

Merci Anne, mais ce n'est pas mon problème. J'utilise le mode SQLServer. Et je peux utiliser la Session dans mon projet principal. C'est lorsque j'essaie d'accéder aux variables de session dans un projet externe (dans la même solution) que j'ai un problème. –

3

Appelez-vous Session.Abandon() n'importe où dans le code? Je le faisais au début de mon application Web pour m'assurer que je commençais avec une session «fraîche». Il s'avère que toutes les variables de session stockées même après le "Abandon" serait abandonné (même si le SessionID a été forcé de rester le même par d'autres moyens, tels que l'utilisation de Server.Transfer (Url, true) plutôt que Response.Redirect) , après la publication. Par exemple, je peux tracer dans mon application, voir toutes les variables de session correctement définies, puis le moment où un gestionnaire d'événement (tout avec AutoPostBack = "True", comme une case à cocher ou un bouton sur un UpdatePanel) a été appelé, BAM , J'ai eu le même SessionID, mais aucune variable de session.

Suppression de l'appel préventif à Session.Abandon() a résolu mon problème immédiatement.

Jeff

Questions connexes