J'utilise VS2010 et j'ai créé un ASP simple. application de formulaires Web, en utilisant Development Server pour le tester.
J'essaie de stocker les données utilisateur - interrogées depuis le serveur SQL - dans la session, car je ne veux pas accéder à la base de données dans chaque requête. J'utilise les méthodes 'Application_AuthenticateRequest' et 'Session_Start'.
Premier tour: AuthenticateRequest appelé. Le code suivant a été exécuté:Pourquoi HttpContext.Current.Session est null dans Global.asax?
public static void Initialize(string login_name, bool force_refresh)
{
HttpSessionState Session = HttpContext.Current.Session;
object o = Session == null ? null : Session["EMPLOYEE_DATA"];
if (force_refresh || o == null || o.GetType() != typeof(Employee) || (o as Employee).login_name!= login_name)
{
_current = UIManager.GetEmployee(login_name);
if (Session != null)
{
Session["EMPLOYEE_DATA"] = _current;
}
}
else
{
_current = (Employee)o;
}
}
La variable _current est un champ statique privé publié via une propriété statique. Au premier tour, la session est nulle, et je pense que c'est ok parce que le Session_Start n'est pas encore appelé. Le Session_Start ressemble à ceci:
protected void Session_Start(object sender, EventArgs e)
{
Session["EMPLOYEE_DATA"] = EmployeeFactory.Current;
}
Au prochain tour du Session_Start n'est pas appelé bien sûr, mais dans le AuthenticateRequest je ne peux pas accéder à la session. La HttpContext.Current.Session est null et la référence this.Session renvoie une exception HttpException indique que "l'état de la session n'est pas disponible dans ce contexte".
Cependant, je peux accéder à la session à partir de l'un des événements page_load mais c'est une mauvaise pratique que je pense que je mets l'authentification chaque page_load. Une idée comment puis-je accéder à la session?
Merci pour les conseils,
Péter
+1 - Je ne l'ai pas lu la question initiale assez près. –
Merci. C'était la solution. –
@ Torbjörn Hansson: Parfois, c'est nul, avez-vous une idée pourquoi? – Homam